Depurando vários destinos
Você pode depurar vários arquivos de despejo ou aplicativos de modo de usuário ao vivo ao mesmo tempo. Cada destino contém um ou mais processos, e cada processo contém um ou mais threads.
Esses alvos também são agrupados em sistemas. Sistemas são conjuntos de alvos que são agrupados para facilitar a identificação e manipulação. Os sistemas são definidos da seguinte forma:
Cada arquivo de despejo de modo kernel ou modo de usuário é um sistema separado.
Quando você está depurando aplicativos de modo de usuário ao vivo em computadores diferentes (usando um servidor de processo, como Dbgsrv), cada aplicativo é um sistema separado.
Quando você está depurando aplicativos de modo de usuário ao vivo no computador local, os aplicativos são combinados em um único sistema.
O sistema atual ou ativo é o sistema que você está depurando no momento.
Adquirindo vários destinos
O primeiro alvo é adquirido da maneira usual.
Você pode depurar aplicativos de modo de usuário ao vivo adicionais usando o comando .attach (Anexar ao Processo) ou .create (Criar Processo), seguido pelo comando g (Go).
Você pode depurar arquivos de despejo adicionais usando o comando .opendump (Open Dump File), seguido pelo comando g (Go ). Você também pode abrir vários arquivos de despejo quando o depurador é iniciado. Para abrir vários arquivos de despejo, inclua várias opções -z no comando, cada uma seguida por um nome de arquivo diferente.
Você pode usar os comandos anteriores mesmo se os processos estiverem em sistemas diferentes. Você deve iniciar um servidor de processo em cada sistema e, em seguida, usar o parâmetro -premote com .attach ou .create para identificar o servidor de processo adequado. Se você usar o comando .attach ou .create novamente sem especificar o parâmetro -premote, o depurador anexará ou criará um processo no sistema atual.
Manipulando sistemas e alvos
Quando a depuração começa, o sistema atual é aquele ao qual o depurador se conectou mais recentemente. Se ocorrer uma exceção, o sistema atual alternará para o sistema em que essa exceção ocorreu.
Para fechar um destino e continuar a depurar os outros destinos, use o comando .kill (Kill Process). Você pode usar o comando .detach (Desanexar do Processo) ou Depurar do WinDbg | Em vez disso, desanexe o comando de menu Depurar . Esses comandos desanexam o depurador do destino, mas deixam o destino em execução.
Para controlar a depuração de vários sistemas, você pode usar os seguintes métodos:
O || (Status do Sistema) O comando exibe informações sobre um ou mais sistemas
O ||O comando s (Set Current System) permite selecionar o sistema atual
(Somente WinDbg) A janela Processos e threads permite exibir ou selecionar sistemas, processos e threads
Usando esses comandos para selecionar o sistema atual e usando os comandos padrão para selecionar o processo e o thread atuais, você pode determinar o contexto dos comandos que exibem memória e registros.
No entanto, não é possível separar a execução desses processos. O comando g (Go) sempre faz com que todos os destinos sejam executados juntos.
Observação Há complicações quando você depura destinos ativos e destinos de despejo juntos, porque os comandos se comportam de forma diferente para cada tipo de depuração. Por exemplo, se você usar o comando g (Go) quando o sistema atual for um arquivo de despejo, o depurador começará a ser executado, mas você não poderá voltar para o depurador, porque o comando break não é reconhecido como válido para depuração de arquivo de despejo.
Exemplo
Para trabalhar com três arquivos de despejo ao mesmo tempo, você pode usar a opção -z para carregá-los quando o WinDbg for iniciado.
windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp
Para obter mais informações, consulte Opções de linha de comando do WinDbg. Você também pode usar os comandos .opendump e g (Go) para carregar arquivos de despejo adicionais no depurador.
Use o || (Status do Sistema) para confirmar que todos os três sistemas estão presentes.
||0:0:007> ||
. 0 User mini dump: c:\notepad.dmp
1 User mini dump: C:\paint.dmp
2 User mini dump: c:\calc.dmp
Use o comando g (Go) para concluir o carregamento dos arquivos de despejo.
||0:0:007> g
************* Path validation summary **************
Response Time (ms) Location
Deferred srv*
Symbol search path is: srv*
Executable search path is:
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun 9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc int 3
Em seguida, use o ||s (Set Current System) para definir o sistema atual para o sistema 1 e, em seguida, exibir o sistema atual.
||1:1:017> ||1s
||1:1:017> ||
0 User mini dump: c:\notepad.dmp
. 1 User mini dump: c:\paint.dmp
2 User mini dump: c:\calc.dmp
Você pode usar o comando .detach quando terminar de examinar o arquivo de despejo atual.
||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc int 3
Detached
||0:0:007> ||
. 0 User mini dump: c:\notepad.dmp
2 User mini dump: c:\calc.dmp
Recursos
Para obter informações adicionais sobre depuração, consulte os seguintes recursos.
Manuais
Depuração avançada do Windows por Mario Hewardt e Daniel Pravat
Por dentro da depuração do Windows: um guia prático para estratégias de depuração e rastreamento no Windows por Tarik Soulami
Windows Internals por Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich e David A. Solomon
Video
As ferramentas de desfragmentação mostram os episódios 13-29 do WinDbg: </shows/defrag-tools/>