Depurando identificadores de arquivo com falha no aplicativo Windows Console

Depurando identificadores de arquivo com falha no aplicativo Windows Console

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 gggem 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, cdbparece 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, cdbativa htracedepois 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 stracefaz 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.

informação relacionada