Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Você pode depurar vários arquivos de despejo ou aplicativos de modo de usuário em tempo real ao mesmo tempo. Cada destino contém um ou mais processos, e cada processo contém um ou mais threads.
Estes alvos também são agrupados em sistemas. Os 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 de 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 o Dbgsrv), cada aplicativo é um sistema separado.
Ao depurar aplicações de modo de utilizador em tempo real no computador local, as aplicações são combinadas num único sistema.
O sistema atual ou ativo é o sistema que está a ser depurado neste momento.
Aquisição de múltiplos alvos
O primeiro alvo é adquirido da forma habitual.
Você pode depurar aplicativos adicionais em modo de utilizador ao vivo usando o comando .attach (Anexar ao Processo) ou .create (Criar Processo), seguido pelo comando g (Ir).
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 que os processos estejam 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 em uso é aquele ao qual o depurador se conectou mais recentemente. Se ocorrer uma exceção, o sistema atual alterna para o sistema em que essa exceção ocorreu.
Para fechar um alvo e continuar a depurar os outros alvos, use o comando .kill (Kill Process). Você pode usar o comando .detach (Desanexar do Processo) ou o comando de menu Debug do WinDbg | Detach Debuggee em vez disso. Esses comandos removem o depurador do alvo, mas deixam o alvo em execução.
Para controlar a depuração de vários sistemas, você pode usar os seguintes métodos:
O || (Estado do Sistema) exibe informações sobre um ou mais sistemas
O ||s (set Current System) comando permite que você selecione o sistema atual
(Apenas 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 alvos sejam executados juntos.
Nota Existem complicações quando se depuram destinos ativos e destinos de despejo em conjunto, pois 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á invadir novamente 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 é iniciado.
windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp
Para obter mais informações, consulte Opções de Command-Line do WinDbg. Você também pode usar os comandos .opendump e g (Go) para carregar arquivos de despejo adicionais no depurador.
Utilize o comando || (Estado 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, utilize o comando ||s (Set Current System) para definir o sistema atual para o sistema 1 e depois 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.
Livros
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
Vídeo
As ferramentas de desfragmentação mostram os episódios 13-29 do WinDbg: </shows/defrag-tools/>