Debuggen mehrerer Ziele
Sie können mehrere Speicherabbilddateien oder Livebenutzermodusanwendungen gleichzeitig debuggen. Jedes Ziel enthält einen oder mehrere Prozesse, und jeder Prozess enthält einen oder mehrere Threads.
Diese Ziele werden auch in Systeme gruppiert. Systeme sind Gruppen von Zielen, die zur einfachen Identifizierung und Manipulation gruppiert werden. Systeme werden wie folgt definiert:
Jede Kernelmodus- oder Benutzermodusabbilddatei ist ein separates System.
Wenn Sie Anwendungen im Live-Benutzermodus auf verschiedenen Computern debuggen (mithilfe eines Prozessservers, z. B. Dbgsrv), ist jede Anwendung ein separates System.
Wenn Sie Anwendungen im Live-Benutzermodus auf dem lokalen Computer debuggen, werden die Anwendungen in einem einzigen System kombiniert.
Das aktuelle oder aktive System ist das System, das Sie derzeit debuggen.
Abrufen mehrerer Ziele
Das erste Ziel wird üblicherweise erworben.
Sie können zusätzliche Benutzermodusanwendungen im Livemodus debuggen, indem Sie den Befehl ".attach to Process" oder ".create" (Create Process) gefolgt vom Befehl g (Go) verwenden.
Sie können zusätzliche Dumpdateien debuggen, indem Sie den Befehl ".opendump(Open Dump File)" gefolgt vom Befehl g (Go) verwenden. Sie können auch mehrere Abbilddateien öffnen, wenn der Debugger gestartet wird. Um mehrere Speicherabbilddateien zu öffnen, schließen Sie mehrere -z-Schalter in den Befehl ein, gefolgt von einem anderen Dateinamen.
Sie können die vorherigen Befehle auch dann verwenden, wenn sich die Prozesse auf verschiedenen Systemen befinden. Sie müssen einen Prozessserver auf jedem System starten und dann den Parameter "-premote" mit ".attach " oder ".create " verwenden, um den richtigen Prozessserver zu identifizieren. Wenn Sie den Befehl ".attach " oder ".create " erneut verwenden, ohne den Parameter "-premote" anzugeben, fügt der Debugger einen Prozess im aktuellen System an oder erstellt ihn.
Bearbeiten von Systemen und Zielen
Wenn das Debuggen beginnt, ist das aktuelle System der, dem der Debugger zuletzt zugeordnet ist. Wenn eine Ausnahme auftritt, wechselt das aktuelle System zu dem System, auf dem diese Ausnahme aufgetreten ist.
Um ein Ziel zu schließen und die anderen Ziele weiterhin zu debuggen, verwenden Sie den Befehl KILL (Kill Process). Sie können den Befehl .detach (Von Process trennen) oder winDbg's Debug | Befehl zum Trennen des Debugmenüs stattdessen. Mit diesen Befehlen wird der Debugger vom Ziel getrennt, aber das Ziel wird ausgeführt.
Zum Steuern des Debuggens mehrerer Systeme können Sie die folgenden Methoden verwenden:
| | (Systemstatus) Der Befehl zeigt Informationen zu einem oder mehreren Systemen an.
| |Mit dem Befehl "Aktuelles System festlegen" können Sie das aktuelle System auswählen.
(Nur WinDbg) Im Fenster "Prozesse und Threads" können Sie Systeme, Prozesse und Threads anzeigen oder auswählen.
Mithilfe dieser Befehle zum Auswählen des aktuellen Systems und mithilfe der Standardbefehle zum Auswählen des aktuellen Prozesses und Threads können Sie den Kontext von Befehlen bestimmen, die Arbeitsspeicher anzeigen und registrieren.
Sie können die Ausführung dieser Prozesse jedoch nicht trennen. Der Befehl g (Go) führt immer dazu, dass alle Ziele gemeinsam ausgeführt werden.
Hinweis : Beim Debuggen von Livezielen und Dumpzielen gibt es Komplikationen, da sich Befehle für jeden Debugtyp unterschiedlich verhalten. Wenn Sie z. B. den Befehl g (Go) verwenden, wenn das aktuelle System eine Speicherabbilddatei ist, beginnt der Debugger mit der Ausführung, aber Sie können nicht in den Debugger zurückbrechen, da der Unterbrechungsbefehl nicht als gültig für das Debuggen der Speicherabbilddatei erkannt wird.
Beispiel
Um gleichzeitig mit drei Dumpdateien zu arbeiten, können Sie die Option "-z" verwenden, um sie zu laden, wenn WinDbg gestartet wird.
windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp
Weitere Informationen finden Sie unter WinDbg-Befehlszeilenoptionen. Sie können auch die Befehle ".opendump " und " g" (Go) verwenden, um zusätzliche Dumpdateien im Debugger zu laden.
Verwenden von || (Systemstatus) befehl, um zu bestätigen, dass alle drei Systeme vorhanden sind.
||0:0:007> ||
. 0 User mini dump: c:\notepad.dmp
1 User mini dump: C:\paint.dmp
2 User mini dump: c:\calc.dmp
Verwenden Sie den Befehl g (Go), um das Laden der Dumpdateien abzuschließen.
||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
Verwenden Sie dann | |s (Set Current System) command to set the current system to system 1 and then display the current system.
||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
Sie können den Befehl ".detach " verwenden, wenn Sie fertig sind, die aktuelle Dumpdatei anzuzeigen.
||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
Ressourcen
Weitere Informationen zum Debuggen finden Sie in den folgenden Ressourcen.
Bücher
Erweitertes Windows Debugging von Mario Hewardt und Daniel Pravat
In Windows Debugging: Eine praktische Anleitung zum Debuggen und Verfolgen von Strategien in Windows durch Tarik Soulami
Windows Internals von Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich und David A. Salomon
Video
Serie „Defrag Tools“, WinDbg-Folgen 13–29: </shows/defrag-tools/>