Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn verschillende manieren om het doel uit te voeren totdat een opgegeven status is bereikt.
Een onderbrekingspunt gebruiken om de uitvoering te beheren
Een methode is het gebruik van een onderbrekingspunt. Het eenvoudigste onderbrekingspunt stopt de uitvoering wanneer de programmateller een opgegeven adres bereikt. Een complexer onderbrekingspunt kan:
alleen worden geactiveerd wanneer dit adres wordt uitgevoerd door een specifieke thread,
een opgegeven aantal doorgangen door dit adres toestaan voordat dit wordt geactiveerd,
een opgegeven opdracht automatisch uitgeven wanneer deze wordt geactiveerd of
bekijk een opgegeven adres in het niet-uitvoerbare geheugen dat wordt geactiveerd wanneer dat geheugen wordt gelezen of naar geschreven.
Zie Onderbrekingspunten gebruiken voor meer informatie over het instellen en beheren van onderbrekingspunten.
Een gecompliceerdere manier om uit te voeren totdat een opgegeven status is bereikt, is door een voorwaardelijk onderbrekingspunt te gebruiken. Dit type onderbrekingspunt wordt ingesteld op een bepaald adres, maar wordt alleen geactiveerd als een opgegeven voorwaarde is ingesteld. Zie Een voorwaardelijk onderbrekingspunt instellen voor meer informatie.
Onderbrekingspunten en Pseudo-Registers
Bij het opgeven van de gewenste status is het vaak handig om automatische pseudoregisters te gebruiken. Dit zijn variabelen die worden beheerd door het foutopsporingsprogramma, waarmee u kunt verwijzen naar verschillende waarden die betrekking hebben op de doelstatus.
Het volgende onderbrekingspunt maakt bijvoorbeeld gebruik van het $thread pseudoregister, dat altijd gelijk is aan de waarde van de huidige thread. Deze wordt omgezet in de waarde van de huidige thread wanneer deze wordt gebruikt in een opdracht. Door $thread te gebruiken als het argument van de parameter /t van de opdracht bp (Onderbrekingspunt instellen), kunt u een onderbrekingspunt maken dat telkens wordt geactiveerd wanneer NtOpenFile wordt aangeroepen door de thread die actief was op het moment dat u de opdracht bp hebt uitgegeven:
kd> bp /t @$thread nt!ntopenfile
Dit onderbrekingspunt wordt niet geactiveerd wanneer een andere thread NtOpenFile aanroept.
Zie Pseudo-Register Syntaxis voor een lijst met automatische pseudoregisters.
Een scriptbestand gebruiken om de uitvoering te beheren
Een andere manier om uit te voeren totdat een opgegeven status is bereikt, is door een scriptbestand te maken dat zichzelf recursief aanroept, waarbij de gewenste status in elke iteratie wordt getest.
Normaal gesproken bevat dit scriptbestand de .if - en .else-tokens . U kunt een opdracht zoals t (Trace) gebruiken om één stap uit te voeren en vervolgens de betreffende voorwaarde te testen.
Als u bijvoorbeeld wilt uitvoeren totdat het eax-register de waarde 0x1234 bevat, kunt u een scriptbestand met de naam eaxstep maken dat de volgende regel bevat:
.if (@eax == 1234) { .echo 1234 } .else { t "$<eaxstep" }
Geef vervolgens de volgende opdracht vanuit het debugger-opdrachtvenster:
t "$<eaxstep"
Deze t-opdracht voert een enkele stap uit en voert vervolgens de opdracht tussen aanhalingstekens uit. Deze opdracht is $< (Scriptbestand uitvoeren) waarmee het eaxstep-bestand wordt uitgevoerd. Het scriptbestand test de waarde van eax, voert de t-opdracht uit en roept zichzelf recursief aan. Dit gaat door totdat het eax-register gelijk is aan 0x1234, waarna de opdracht .echo (Echo Comment) een bericht afdrukt naar het opdrachtvenster Foutopsporingsprogramma en de uitvoering stopt.
Zie Scriptbestanden gebruiken en Programma's voor foutopsporingsprogramma's gebruiken voor meer informatie over scriptbestanden.
Niet-eenduidige oplossing voor onderbrekingspunten
In versie 10.0.25310.1001 en hoger van de foutopsporingsprogramma-engine wordt nu ambigu onderbrekingspuntresolutie ondersteund. Ambigue onderbrekingspunten maken het mogelijk dat de debugger onder bepaalde omstandigheden onderbrekingspunten instelt, waarbij een onderbrekingspunt naar meerdere locaties kan leiden. Zie ambigu onderbrekingspuntresolutievoor meer informatie.
Zie ook
Syntaxis van onderbrekingspunt
bp, bu, bm (Onderbrekingspunt instellen)