Eu tenho um aplicativo de console que usa puTTY como DLL e preciso depurar a biblioteca puTTY em questão.
No UNIX, eu faria strace <command>
.
strace ls ggg
Imprimiria algo como:
stat("ggg", 0x166b0d0) = -1 ENOENT (No such file or directory)
porque não tenho nenhum arquivo ou diretório nomeado ggg
em meu diretório atual. Eu preciso disso para um aplicativo de console do Windows.
Pesquisei on-line e baixei o SDK do Windows com ferramentas de depuração. Tentei vários programas, cdb
parece ser o que preciso.
fazer cdb -o "!htrace -enable" <command>
parece ser o que eu preciso, mas acho que está faltando alguma coisa, porque não fornece nenhuma dica de por que o comando está falhando ou falha nas tentativas de abertura de arquivo. (se <command>
carregar um arquivo, ele "deveria" ter sucesso, no entanto, <command>
deseja um nome de "sessões", não um caminho de arquivo, e então procura um arquivo ou chave de registro com esse nome de sessão):
CommandLine: <command>
Symbol search path is: srv*
Executable search path is:
ModLoad: 00400000 004a7000 image00400000
ModLoad: 77d00000 77e8d000 ntdll.dll
ModLoad: 77aa0000 77b70000 C:\WINDOWS\SysWOW64\KERNEL32.DLL
ModLoad: 748e0000 74ab7000 C:\WINDOWS\SysWOW64\KERNELBASE.dll
ModLoad: 779d0000 77a36000 C:\WINDOWS\SysWOW64\WS2_32.dll
ModLoad: 77b70000 77c2e000 C:\WINDOWS\SysWOW64\RPCRT4.dll
ModLoad: 74720000 74740000 C:\WINDOWS\SysWOW64\SspiCli.dll
ModLoad: 74710000 7471a000 C:\WINDOWS\SysWOW64\CRYPTBASE.dll
ModLoad: 74f00000 74f57000 C:\WINDOWS\SysWOW64\bcryptPrimitives.dll
ModLoad: 75d10000 75d53000 C:\WINDOWS\SysWOW64\sechost.dll
ModLoad: 757c0000 75838000 C:\WINDOWS\SysWOW64\ADVAPI32.dll
ModLoad: 776b0000 7776d000 C:\WINDOWS\SysWOW64\msvcrt.dll
(2f550.32120): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000010 ecx=44ce0000 edx=00000000 esi=00249000 edi=77d06964
eip=77dadbcf esp=00cafa0c ebp=00cafa38 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
ntdll!LdrInitShimEngineDynamic+0x6af:
77dadbcf cc int 3
0:000> cdb: Reading initial command '!htrace -enable'
Handle tracing enabled.
Handle tracing information snapshot successfully taken.
0:000>
Basicamente, estou tentando descobrir de onde o pscp.exe (puTTY scp) carrega a sessão no Windows, neste caso - responder a essa pergunta não vai ajudar, quero saber como posso rastrear identificadores, pelo que entendi, cdb
ativa htrace
depois o programa foi concluído ou preciso digitar algo para o comando iniciar (não tenho certeza), até tentei criar um novo processo com as opções de dentro do depurador, ainda carrego apenas DLL's, nada mais.
Eu tentei logger.exe <command>
e logger.exe -o <command>
comofluxo de pilhadiz que é o mais próximo de strace
, lista as DLLs, assim como cdb
, nada mais. Em windbg
, vejo 8 identificadores de arquivo, no entanto, nenhuma informação sobre caminhos de arquivo ...
Desculpe, eu sou um cara do Linux, tão mimado que strace
faz o trabalho sem opções.
Eu li:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-handle
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/cdb-command-line-options
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-a-user-mode-process-using-cdb
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-create--create-process-(para tentar iniciar <command>
assim que o depurador for carregado) ... e mais alguns ...
Responder1
No momento, você está usando ferramentas de depuração reais que podem ser bastante difíceis de entender, mas que fornecem muitos detalhes. Com o propósito de fazer isso, pode ser uma opção usar uma ferramenta mais simples para obter as informações que você precisa.
Para Windows, existem algumas ferramentas disponíveis, conhecidas como "suíte sysinternals" isso pode ajudá-lo sem precisar entender toda a saída de depuração obtida com as ferramentas de depuração reais.
Em particular, o identificador da ferramenta deve ser capaz de ajudá-lo a descobrir o que está usando um arquivo aberto no momento. Embora o monitor de processo mostre um feed ao vivo de muitas ações realizadas pelos programas atualmente em execução. Focado principalmente em operações de registro e arquivos.
Para descobrir de onde um programa está obtendo informações, você pode tentar usar o monitor de processo e configurá-lo para mostrar apenas as ações de um programa específico. A própria ferramenta possui opções de filtragem para vários tipos de ações, bem como para propriedades dessas ações.