Delen via


Debuggen van meerdere doelwitten

U kunt tegelijkertijd fouten opsporen in meerdere dumpbestanden of live-gebruikersmodustoepassingen. Elk doel bevat een of meer processen en elk proces bevat een of meer threads.

Deze doelen worden ook gegroepeerd in systemen. Systemen zijn sets doelen die zijn gegroepeerd voor eenvoudige identificatie en manipulatie. Systemen worden als volgt gedefinieerd:

  • Elk kernelmodus- of gebruikersmodusdumpbestand is een afzonderlijk systeem.

  • Wanneer u live gebruikersapplicaties op verschillende computers debugt (door een processerver zoals Dbgsrv te gebruiken), is elke applicatie een afzonderlijk systeem.

  • Wanneer u live gebruikersmodustoepassingen op de lokale computer aan het debuggen bent, worden de toepassingen gecombineerd tot één systeem.

Het huidige of actieve systeem is het systeem dat u momenteel foutopsporing uitvoert.

Meerdere doelen verkrijgen

Het eerste doel wordt op de gebruikelijke manier verkregen.

U kunt fouten opsporen in aanvullende livetoepassingen in de gebruikersmodus met behulp van de opdracht .attach (koppelen aan proces) of .create (Proces maken), gevolgd door de opdracht g (Go).

U kunt fouten opsporen in extra dumpbestanden met behulp van de opdracht .opendump (Open Dump File), gevolgd door de opdracht g (Go). U kunt ook meerdere dumpbestanden openen wanneer het foutopsporingsprogramma wordt gestart. Als u meerdere dumpbestanden wilt openen, neemt u meerdere schakelopties -z op in de opdracht, gevolgd door een andere bestandsnaam.

U kunt de voorgaande opdrachten gebruiken, zelfs als de processen zich op verschillende systemen bevinden. U moet een processerver op elk systeem starten en vervolgens de parameter -premote gebruiken met .attach of .create om de juiste processerver te identificeren. Als u de opdracht .attach of .create opnieuw gebruikt zonder de parameter -premote op te geven, wordt het foutopsporingsprogramma gekoppeld aan of wordt er een proces gemaakt op het huidige systeem.

Systemen en doelen bewerken

Wanneer de foutopsporing begint, is het huidige systeem het systeem waaraan het foutopsporingsprogramma het laatst is gekoppeld. Als er een uitzondering optreedt, schakelt het huidige systeem over naar het systeem waarop deze uitzondering heeft plaatsgevonden.

Als u één doel wilt sluiten en fouten wilt blijven opsporen in de andere doelen, gebruikt u de opdracht .kill (Kill Process). U kunt de opdracht .detach (Loskoppelen van proces) gebruiken of de Debug | Debuggee loskoppelen menuopdracht van WinDbg in plaats daarvan. Met deze opdrachten wordt de debugger losgekoppeld van het doel, maar blijft het doel actief.

Als u de foutopsporing van meerdere systemen wilt beheren, kunt u de volgende methoden gebruiken:

Door deze opdrachten te gebruiken om het huidige systeem te selecteren en met behulp van de standaardopdrachten om het huidige proces en de thread te selecteren, kunt u de context bepalen van opdrachten die geheugen en registers weergeven.

U kunt de uitvoering van deze processen echter niet scheiden. De opdracht g (Go) zorgt er altijd voor dat alle doelen samen worden uitgevoerd.

Notitie Er zijn complicaties wanneer u live doelen en dumpdoelen samen opspoort, omdat opdrachten zich anders gedragen voor elk type foutopsporing. Als u bijvoorbeeld de opdracht g (Go) gebruikt wanneer het huidige systeem een dumpbestand is, wordt het foutopsporingsprogramma uitgevoerd, maar u kunt het foutopsporingsprogramma niet meer in het foutopsporingsprogramma inbreken, omdat de onderbrekingsopdracht niet wordt herkend als geldig voor foutopsporing van dumpbestanden.

Voorbeeld

Als u tegelijkertijd met drie dumpbestanden wilt werken, kunt u de -z optie gebruiken om ze te laden wanneer WinDbg wordt gestart.

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

Zie WinDbg Command-Line Options voor meer informatie. U kunt ook de .opendump - en g-opdrachten (Go) gebruiken om extra dumpbestanden in het foutopsporingsprogramma te laden.

Gebruik de || (Systeemstatus) opdracht om te bevestigen dat alle drie de systemen aanwezig zijn.

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

Gebruik de opdracht g (Go) om het laden van de dumpbestanden te voltooien.

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

Gebruik vervolgens ||s (Set Current System) opdracht om het huidige systeem in te stellen op systeem 1 en vervolgens het huidige systeem weer te geven.

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

U kunt de opdracht .detach gebruiken wanneer u klaar bent met het bekijken van het huidige dumpbestand.

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

Hulpmiddelen

Zie de volgende bronnen voor meer informatie over foutopsporing.

Boeken

  • Geavanceerd Windows-debuggen door Mario Hewardt en Daniel Pravat

  • Windows Debugging van Binnenuit: Een praktische gids voor foutopsporing en traceerstrategieën in Windows door Tarik Soulami

  • Windows Internals van Pavel Yosifovich, Alex Ionescu, Mark E. Russinovich en David A. Salomon

Video

De Defrag Tools Show WinDbg Afleveringen 13-29: </shows/defrag-tools/>