Debug di più destinazioni

È possibile eseguire il debug di più file di dump o applicazioni in modalità utente in tempo reale contemporaneamente. Ogni destinazione contiene uno o più processi e ogni processo contiene uno o più thread.

Queste destinazioni sono raggruppate anche in sistemi. I sistemi sono set di destinazioni raggruppate per facilitare l'identificazione e la manipolazione. I sistemi sono definiti come segue:

  • Ogni file di dump in modalità kernel o utente è un sistema separato.

  • Quando si esegue il debug di applicazioni in modalità utente live in computer diversi (usando un server di elaborazione, ad esempio Dbgsrv), ogni applicazione è un sistema separato.

  • Quando si esegue il debug di applicazioni in modalità utente live nel computer locale, le applicazioni vengono combinate in un unico sistema.

Il sistema corrente o attivo è il sistema di cui si sta eseguendo il debug.

Acquisizione di più destinazioni

Il primo obiettivo viene acquisito nel modo consueto.

È possibile eseguire il debug di altre applicazioni in modalità utente live usando il comando .attach (Attach to Process) o .create (Create Process), seguito dal comando g (Go).

È possibile eseguire il debug di file di dump aggiuntivi usando il comando opendump (Open Dump File), seguito dal comando g (Go). È anche possibile aprire più file di dump all'avvio del debugger. Per aprire più file di dump, includere più opzioni -z nel comando, ognuna seguita da un nome di file diverso.

È possibile usare i comandi precedenti anche se i processi si trovano in sistemi diversi. È necessario avviare un server di elaborazione in ogni sistema e quindi usare il parametro -premote con .attach o .create per identificare il server di elaborazione appropriato. Se si usa di nuovo il comando .attach o .create senza specificare il parametro -premote, il debugger si connette o crea un processo nel sistema corrente.

Modifica di sistemi e destinazioni

All'avvio del debug, il sistema corrente è quello a cui il debugger è collegato più di recente. Se si verifica un'eccezione, il sistema corrente passa al sistema in cui si è verificata questa eccezione.

Per chiudere una destinazione e continuare a eseguire il debug delle altre destinazioni, usare il comando kill (Kill Process). È possibile usare il comando detach (scollegamento da processo) o il debug di WinDbg | Scollegare invece il comando di menu Debug . Questi comandi scollegano il debugger dalla destinazione, ma lasciano la destinazione in esecuzione.

Per controllare il debug di più sistemi, è possibile usare i metodi seguenti:

Usando questi comandi per selezionare il sistema corrente e usando i comandi standard per selezionare il processo e il thread correnti, è possibile determinare il contesto dei comandi che visualizzano memoria e registri.

Tuttavia, non è possibile separare l'esecuzione di questi processi. Il comando g (Go) determina sempre l'esecuzione di tutte le destinazioni insieme.

Nota Esistono complicazioni, quando si esegue il debug di destinazioni attive e destinazioni di dump insieme, perché i comandi si comportano in modo diverso per ogni tipo di debug. Ad esempio, se si usa il comando g (Go) quando il sistema corrente è un file dump, il debugger inizia l'esecuzione, ma non è possibile eseguire nuovamente il debugger, perché il comando di interruzione non è riconosciuto come valido per il debug dei file di dump.

Esempio

Per usare tre file di dump contemporaneamente, è possibile usare l'opzione -z per caricarli all'avvio di WinDbg.

windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp

Per altre informazioni, vedere Opzioni della riga di comando di WinDbg. È anche possibile usare i comandi .opendump e g (Go) per caricare altri file di dump nel debugger.

Usare | | (Stato sistema) comando per verificare che siano presenti tutti e tre i sistemi.

||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   1 User mini dump: C:\paint.dmp
   2 User mini dump: c:\calc.dmp

Usare il comando g (Go) per completare il caricamento dei file di dump.

||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

Usare quindi | |s (Imposta sistema corrente) comando per impostare il sistema corrente su system 1 e quindi visualizzare il sistema corrente.

||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

È possibile usare il comando detach al termine dell'analisi del file di dump corrente.

||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

Risorse

Per altre informazioni sul debug, vedere le risorse seguenti.

Libri

  • Debug avanzato di Windows di Mario Hewardt e Daniel Pravat

  • Debug di Windows: guida pratica al debug e alla traccia di strategie in Windows di Tarik Soulami

  • Windows Internals di Paolo Yosifovich, Alex Ionovich, Mark E. Russinovich e David A. Solomon

Video

The Defrag Tools Show WinDbg Episodes 13-29: </shows/defrag-tools/>