Delen via


Fouten opsporen in een User-Mode-proces met CDB

U kunt CDB gebruiken om te koppelen aan een actief proces of om te spawn en te koppelen aan een nieuw proces.

Koppelen aan een actief proces

Opdrachtprompt

In een opdrachtpromptvenster kunt u koppelen aan een actief proces wanneer u CDB start. Gebruik een van de volgende opdrachten:

  • cdb -pProcessID
  • cdb -pnProcessName

waarbij ProcessID de proces-id is van een actief proces of ProcessName de naam is van een actief proces.

Zie CDB Command-Line Options voor meer informatie over de opdrachtregelsyntaxis.

CDB-opdrachtvenster

Als het foutopsporingsprogramma al fouten in een of meer processen opspoort, kunt u een actief proces koppelen met behulp van de opdracht .attach (koppelen aan proces).

Het foutopsporingsprogramma start altijd meerdere doelprocessen tegelijk, tenzij sommige van hun threads zijn geblokkeerd of onderbroken.

Als de opdracht .attach is geslaagd, wordt het foutopsporingsprogramma gekoppeld aan het opgegeven proces wanneer het foutopsporingsprogramma de volgende keer een uitvoeringsopdracht uitvoert. Als u deze opdracht meerdere keren achter elkaar gebruikt, moet de uitvoering zo vaak worden aangevraagd door het foutopsporingsprogramma als u deze opdracht gebruikt.

Niet-invasief koppelen aan een actief proces

Als u fouten in een actief proces wilt opsporen en deze slechts minimaal in de uitvoering wilt verstoren, moet u het proces op niet-invasieve wijze debuggen.

Opdrachtprompt

Als u niet-invasief fouten wilt opsporen in een actief proces vanaf de CDB-opdrachtregel, geeft u de optie -pv, de optie -p en de proces-id op volgens de volgende syntaxis.

cdb -pv -pProcessID

Gebruik in plaats daarvan de volgende syntaxis als u fouten wilt opsporen in een actief proces door de naam van het proces op te geven.

cdb -pv -pnProcessName

Er zijn verschillende andere handige opdrachtregelopties. Zie CDB Command-Line Options voor meer informatie over de opdrachtregelsyntaxis.

CDB-opdrachtvenster

Als het foutopsporingsprogramma al actief is, kunt u fouten opsporen in een actief proces door de opdracht .attach -v (koppelen aan proces) in te voeren.

U kunt de opdracht .attach gebruiken als het foutopsporingsprogramma al één of meer processen ingrijpend debugt.

Als de opdracht .attach -v is geslaagd, wordt het opgegeven proces door het foutopsporingsprogramma de volgende keer opgespoord dat het foutopsporingsprogramma een uitvoeringsopdracht uitgeeft. Omdat uitvoering niet is toegestaan tijdens niet-invasieve foutopsporing, kan het foutopsporingsprogramma niet meer dan één proces tegelijk opsporen. Deze beperking betekent ook dat het gebruik van de opdracht .attach -v een bestaande invasief foutopsporingssessie minder nuttig maakt.

Een nieuw proces starten

CDB kan een toepassing in de gebruikersmodus starten en vervolgens fouten opsporen in de toepassing. De toepassing wordt met naam gespecificeerd. Het foutopsporingsprogramma kan ook automatisch worden gekoppeld aan onderliggende processen (aanvullende processen die door het oorspronkelijke doelproces zijn gestart).

Processen die door het foutopsporingsprogramma worden gemaakt (ook wel bekend als spawned-processen), gedragen zich iets anders dan processen die het foutopsporingsprogramma niet maakt.

In plaats van de standaard-heap-API te gebruiken, gebruiken processen die door het foutopsporingsprogramma worden gemaakt een speciale heap voor foutopsporing. U kunt afdwingen dat een gestart proces de standaardheap gebruikt in plaats van de debug-heap met behulp van de omgevingsvariabele _NO_DEBUG_HEAP of de -hd-commando-optie.

Omdat de doeltoepassing een onderliggend proces van het foutopsporingsprogramma is, neemt deze de machtigingen van het foutopsporingsprogramma over. Met deze machtiging kan de doeltoepassing bepaalde acties uitvoeren die anders niet kunnen worden uitgevoerd. De doeltoepassing kan bijvoorbeeld invloed hebben op beveiligde processen.

In een opdrachtpromptvenster kunt u een nieuw proces starten wanneer u CDB start. Voer de volgende opdracht in.

cdb [-o]ProgramName[Argumenten]

De optie -o zorgt dat het foutopsporingsprogramma wordt gekoppeld aan kindprocessen. Er zijn verschillende andere handige opdrachtregelopties. Zie CDB Command-Line Options voor meer informatie over de opdrachtregelsyntaxis.

Als het foutopsporingsprogramma al fouten in een of meer processen opspoort, kunt u een nieuw proces maken door de opdracht .create (Proces maken) in te voeren.

Het foutopsporingsprogramma start altijd meerdere doelprocessen tegelijk, tenzij sommige van hun threads zijn geblokkeerd of onderbroken.

Als de opdracht .create is geslaagd, maakt het foutopsporingsprogramma het opgegeven proces de volgende keer dat het foutopsporingsprogramma een uitvoeringsopdracht uitgeeft. Als u deze opdracht meerdere keren achter elkaar gebruikt, moet de uitvoering zo vaak worden aangevraagd door het foutopsporingsprogramma als u deze opdracht gebruikt.

U kunt de beginmap van de toepassing beheren met behulp van de opdracht .createdir (Set Created Process Directory) voordat u .create maakt. U kunt de opdracht .createdir -I of de opdrachtregeloptie -noinh gebruiken om te bepalen of de doeltoepassing de ingangen van het foutopsporingsprogramma over neemt.

U kunt de foutopsporing van onderliggende processen activeren of deactiveren met behulp van de opdracht .childdbg (Onderliggende processen opsporen).

Opnieuw koppelen aan een proces

Als het foutopsporingsprogramma niet meer reageert of blokkeert, kunt u een nieuw foutopsporingsprogramma toevoegen aan het doelproces. Zie Opnieuw koppelen aan de doeltoepassing voor meer informatie over het koppelen van een foutopsporingsprogramma in deze situatie.