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:
| | (Stato sistema) il comando visualizza informazioni su uno o più sistemi
| |s (Imposta sistema corrente) consente di selezionare il sistema corrente
(solo WinDbg) La finestra Processi e thread consente di visualizzare o selezionare sistemi, processi e thread
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/>