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.
U kunt uitzonderingen in toepassingen in de gebruikersmodus en kernelmodus ondervangen en afhandelen op verschillende manieren. Een actief foutopsporingsprogramma, een postmortem-foutopsporingsprogramma of een interne foutafhandelingsroutine zijn allemaal veelgebruikte manieren om uitzonderingen af te handelen.
Zie Postmortem-foutopsporing inschakelen voor meer informatie over de prioriteitsvolgorde van deze verschillende uitzonderingshandlers.
Wanneer het Microsoft Windows-besturingssysteem een foutopsporingsprogramma toestaat om een uitzondering af te handelen, wordt de toepassing die de uitzondering heeft gegenereerd , opgesplitst in het foutopsporingsprogramma. Dat wil gezegd, de toepassing stopt en het foutopsporingsprogramma wordt actief. Het foutopsporingsprogramma kan vervolgens de uitzondering op een of andere manier verwerken of de situatie analyseren. Het foutopsporingsprogramma kan vervolgens het proces beëindigen of het uitvoeren ervan laten hervatten.
Als het foutopsporingsprogramma de uitzondering negeert en de toepassing kan blijven uitvoeren, zoekt het besturingssysteem naar andere uitzonderingshandlers alsof er geen foutopsporingsprogramma aanwezig was. Als de uitzondering wordt verwerkt, blijft de toepassing actief. Als de uitzondering echter niet wordt verwerkt, krijgt het foutopsporingsprogramma een tweede kans om met de situatie om te gaan.
Het foutopsporingsprogramma gebruiken om een uitzondering te analyseren
Wanneer een uitzondering of gebeurtenis in het foutopsporingsprogramma inbreekt, kunt u het foutopsporingsprogramma gebruiken om de code te onderzoeken die wordt uitgevoerd en het geheugen dat door de toepassing wordt gebruikt. Als u bepaalde hoeveelheden wijzigt of naar een ander punt in de toepassing springt, kunt u mogelijk de oorzaak van de uitzondering verwijderen.
U kunt de uitvoering hervatten door een gh-opdracht (Go met uitzondering verwerkt) of gn (Go met uitzondering niet verwerkt) uit te geven.
Als u de gn-opdracht in de tweede kans van het foutopsporingsprogramma geeft om de uitzondering af te handelen, eindigt de toepassing.
uitzonderingen voorKernel-Mode
Uitzonderingen die optreden in kernelmoduscode zijn ernstiger dan uitzonderingen in de gebruikersmodus. Als uitzonderingen in de kernelmodus niet worden verwerkt, wordt er een foutcontrole uitgevoerd en stopt het systeem.
Als er een debugger voor de kernelmodus aan het systeem is gekoppeld, wordt deze, net als bij uitzonderingen in de gebruikersmodus, op de hoogte gebracht voordat het foutcontrole scherm (ook wel een blauw scherm genoemd) verschijnt. Als er geen foutopsporingsprogramma is gekoppeld, wordt het scherm voor foutcontrole weergegeven. In dit geval kan het besturingssysteem een crashdumpbestand maken.
Uitzonderingen en gebeurtenissen beheren vanuit het foutopsporingsprogramma
U kunt het foutopsporingsprogramma zo configureren dat deze op een specifieke manier reageert op opgegeven uitzonderingen en gebeurtenissen.
Het foutopsporingsprogramma kan de onderbrekingsstatus voor elke uitzondering of gebeurtenis instellen:
De gebeurtenis kan een onderbreking in het foutopsporingsprogramma veroorzaken zodra deze plaatsvindt (de 'eerste kans').
Het evenement kan ingrijpen nadat andere foutafhandelingsmechanismen een kans hebben gekregen om te reageren (de 'tweede kans').
De gebeurtenis kan ook het foutopsporingsprogramma een bericht verzenden, maar doorgaan met de uitvoering.
Het foutopsporingsprogramma kan de gebeurtenis negeren.
Het foutopsporingsprogramma kan ook de verwerkingsstatus voor elke uitzondering en gebeurtenis instellen. Het foutopsporingsprogramma kan de gebeurtenis behandelen als een afgehandelde uitzondering of een niet-verwerkte uitzondering. (Gebeurtenissen die geen fouten zijn, vereisen natuurlijk geen verwerking.)
U kunt de onderbrekingsstatus en de verwerkingsstatus beheren door een van de volgende handelingen uit te voeren:
Gebruik de opdracht SXE, SXD, SXN of SXI in het opdrachtvenster Foutopsporingsprogramma.
(CDB en NTSD) Gebruik de optie -x, -xe, -xd, -xn of -xi op de opdrachtregel.
(CDB, NTSD en KD) Gebruik het trefwoord sxe of sxd in het Tools.ini-bestand .
(Alleen WinDbg) Selecteer Gebeurtenisfilters in het menu Foutopsporing om het dialoogvenster Gebeurtenisfilters te openen en kies vervolgens de gewenste opties.
De SX\*-opdracht, de opdrachtregeloptie -x\* en het sx\* Tools.ini trefwoord stellen doorgaans de onderbrekingsstatus van de opgegeven gebeurtenis in. U kunt de optie -h toevoegen zodat de verwerkingsstatus wordt ingesteld.
Er zijn vier speciale gebeurteniscodes (cc, hc, bpec en ssec) die altijd de verwerkingsstatus opgeven in plaats van de onderbrekingsstatus.
U kunt de meest recente uitzondering of gebeurtenis weergeven met behulp van de opdracht .lastevent (Laatste gebeurtenis weergeven).
Onderbrekingsstatus beheren
Wanneer u de onderbrekingsstatus van een uitzondering of gebeurtenis instelt, kunt u de volgende opties gebruiken.
| Command | Statusnaam | Description |
|---|---|---|
| SXE of -xe | Onderbreking (Ingeschakeld) |
Wanneer deze uitzondering optreedt, komt het doel onmiddellijk in de debugger. Deze onderbreking treedt op voordat alle andere foutafhandelaren worden geactiveerd. Deze methode wordt 'first-chance handling' genoemd. |
| SXD of -xd | Tweede kans pauze (Uitgeschakeld) |
Het foutopsporingsprogramma breekt niet in voor dit soort uitzondering voor de eerste kans (hoewel er een bericht wordt weergegeven). Als andere fouthandlers deze uitzondering niet kunnen oplossen, stopt de uitvoering en wordt het doel onderbroken in de debugger. Deze methode wordt tweede kansafhandeling genoemd. |
| SXN of -xn | Uitvoer (Melden) |
Wanneer deze uitzondering optreedt, breekt de doeltoepassing helemaal niet in de debugger. Er wordt echter een bericht weergegeven dat de gebruiker informeert over deze uitzondering. |
| SXI of -xi | Negeren |
Wanneer deze uitzondering optreedt, breekt de doeltoepassing niet in het foutopsporingsprogramma en wordt er geen bericht weergegeven. |
Als een uitzondering niet wordt verwacht door een SX*-instelling, breekt de doeltoepassing het foutopsporingsprogramma in bij de tweede kans. De standaardstatus voor gebeurtenissen wordt vermeld in de volgende sectie 'Gebeurtenisdefinities en standaardinstellingen' van dit onderwerp.
Als u de onderbrekingsstatus wilt instellen met behulp van de grafische WinDbg-interface, selecteert u gebeurtenisfilters in het menu Foutopsporing de gewenste gebeurtenis in de lijst in het dialoogvenster Gebeurtenisfilters en selecteert u Vervolgens Ingeschakeld, Uitgeschakeld, Uitvoer of Negeren.
Verwerkingsstatus beheren
Alle gebeurtenissen worden beschouwd als onverwerkt, tenzij u de opdracht gh (Go with Exception Handled) gebruikt.
Alle uitzonderingen worden beschouwd als niet-verwerkt, tenzij u de opdracht sx\* samen met de optie -h gebruikt.
Daarnaast kunnen SX*-opties de verwerkingsstatus configureren voor ongeldige handles, STATUS_BREAKPOINT break-instructies en eenstapsuitzonderingen. (Deze configuratie staat los van de onderbrekingsconfiguratie.) Wanneer u hun onderbrekingsstatus configureert, worden deze gebeurtenissen respectievelijk ch, bpe en sse genoemd. Wanneer u de verwerkingsstatus configureert, worden deze gebeurtenissen respectievelijk hc, bpec en ssec genoemd. (Zie de volgende sectie Gebeurtenisdefinities en -standaardwaarden voor de volledige lijst met gebeurtenissen.)
U kunt de verwerkingsstatus voor de Ctrl+C-gebeurtenis (CC) configureren, maar niet de onderbrekingsstatus. Als een toepassing een Ctrl+C-gebeurtenis ontvangt, breekt de toepassing altijd het foutopsporingsprogramma in.
Wanneer u de SX*-opdracht gebruikt voor cc-, hc-, bpec- en ssec-gebeurtenissen , of wanneer u de SX*-opdracht samen met de optie -h op een uitzondering gebruikt, vinden de volgende acties plaats.
| Command | Statusnaam | Description |
|---|---|---|
SXE |
Behandeld |
De gebeurtenis wordt beschouwd als verwerkt wanneer de uitvoering wordt hervat. |
SXD,SXN,SXI |
Niet verwerkt |
De gebeurtenis wordt beschouwd als niet verwerkt wanneer de uitvoering wordt hervat. |
Als u de verwerkingsstatus wilt instellen met behulp van de grafische WinDbg-interface, selecteert u Gebeurtenisfilters in het menu Foutopsporing , selecteert u de gewenste gebeurtenis in de lijst in het dialoogvenster Gebeurtenisfilters en selecteert u Vervolgens Verwerkt of Niet verwerkt.
Automatische opdrachten
Met het foutopsporingsprogramma kunt u ook opdrachten instellen die automatisch worden uitgevoerd als de gebeurtenis of uitzondering een onderbreking in het foutopsporingsprogramma veroorzaakt. U kunt een opdrachtreeks instellen voor de first-chance-exception en een opdrachtreeks voor de second-chance-exception. U kunt deze tekenreeksen instellen met de opdracht SX\* of de foutopsporing | Opdracht Gebeurtenisfilters . Elke opdrachtreeks kan meerdere opdrachten bevatten die zijn gescheiden door puntkomma's.
Deze opdrachten worden uitgevoerd, ongeacht de onderbrekingsstatus. Als de onderbrekingsstatus 'Negeren' is, wordt de opdracht nog steeds uitgevoerd. Als de onderbrekingsstatus 'Tweede-kans onderbreking' is, wordt de eerste-kans opdracht uitgevoerd wanneer de exception zich voor het eerst voordoet, voordat andere exception handlers betrokken zijn. De opdrachtreeks kan eindigen met een uitvoeringsopdracht, zoals g (Go), gh (Go met uitzondering verwerkt)of gn (Go met uitzondering niet verwerkt).
Gebeurtenisdefinities en -standaardwaarden
U kunt de onderbrekingsstatus of de afhandelingsstatus van de volgende uitzonderingen wijzigen. De standaardonderbrekingsstatus wordt aangegeven.
De standaardafhandelingsstatus van de volgende uitzonderingen is altijd 'Niet verwerkt'. Wees voorzichtig met het wijzigen van deze status. Als u deze status wijzigt in 'Verwerkt', worden alle uitzonderingen voor de eerste kans en tweede kans van dit type beschouwd als afgehandeld en wordt met deze configuratie alle routines voor het afhandelen van uitzonderingen overgeslagen.
| Gebeurteniscode | Meaning | Standaardstatus van onderbreking |
|---|---|---|
asrt |
Fout in assertie |
Pauze |
Av |
Toegangsschending |
Pauze |
Dm |
Gegevens onjuist uitgelijnd |
Pauze |
Dz |
Deling van gehele getallen door nul |
Pauze |
c000008e |
Deling van een kommagetal door nul |
Pauze |
Eh |
C++ EH-uitzondering |
Tweede kans-pauze |
Gp |
Schending van beveiligde pagina |
Pauze |
ii |
Illegale instructie |
Tweede kans-pauze |
iov |
Overloop van gehele getallen |
Pauze |
IP- |
I/O-fout op pagina |
Pauze |
Isc |
Ongeldige systeemoproep |
Pauze |
lsq |
Ongeldige vergrendelingsvolgorde |
Pauze |
sbo |
Stackbufferoverloop |
Pauze |
Sov |
Stack overflow |
Pauze |
wkd |
Activeer debugger |
Pauze |
aph |
Toepassing reageert niet Deze uitzondering wordt geactiveerd als het Windows-besturingssysteem vaststelt dat een proces niet meer reageert (dat wil zeggen, is vastgelopen). |
Pauze |
3c |
Beëindiging van kindtoepassing |
Tweede kans pauze |
ch |
Ongeldige verwijzing |
Pauze |
Nummer |
Een genummerde uitzondering |
Tweede kanspauze |
Notitie U kunt de asrt-onderbrekingsstatus voor een specifiek adres overschrijven met behulp van de ah-opdracht (Assertion Handling). De ch - en hc-gebeurteniscodes verwijzen naar dezelfde uitzondering. Wanneer u de status van de onderbreking aan het beheren bent, gebruikt u sx* ch. Wanneer u de verwerkingsstatus beheert, gebruikt u sx* hc.
U kunt de onderbrekingsstatus of de afhandelingsstatus van de volgende uitzonderingen wijzigen. De standaardonderbrekingsstatus wordt aangegeven.
De standaardafhandelingsstatus van de volgende uitzonderingen is altijd 'Verwerkt'. Omdat deze uitzonderingen worden gebruikt om te communiceren met het foutopsporingsprogramma, moet u de status doorgaans niet wijzigen in 'Niet verwerkt'. Deze status zorgt ervoor dat andere exceptionhandlers de uitzonderingen opvangen als de debugger deze negeert.
Een toepassing kan DBG_COMMAND_EXCEPTION (dbce) gebruiken om te communiceren met het foutopsporingsprogramma. Deze uitzondering is vergelijkbaar met een onderbrekingspunt, maar u kunt de SX*-opdracht gebruiken om op een specifieke manier te reageren wanneer deze uitzondering optreedt.
| Gebeurteniscode | Meaning | Standaard pauzestatus |
|---|---|---|
dbce |
Speciale uitzondering voor debugger-opdracht |
Negeren |
vcpp |
Speciale Visual C++-uitzondering |
Negeren |
wos |
WOW64-uitzondering met één stap |
Pauze |
wob |
WOW64 onderbrekingspunt uitzondering- |
Pauze |
Sse |
Uitzondering met één stap |
Pauze |
bpe |
Onderbrekingspunt-uitzondering |
Pauze |
cce |
Ctrl+C of CTRL+BREAK Deze uitzondering wordt geactiveerd als het doel een consoletoepassing is en CTRL+C of CTRL+BREAK eraan wordt doorgegeven. |
Pauze |
Notitie De laatste drie uitzonderingen in de voorgaande tabel hebben twee verschillende gebeurteniscodes. Wanneer u de onderbrekingsstatus beheert, gebruikt u sse, bpe en cce. Wanneer u de verwerkingsstatus beheert, gebruikt u ssec, bpec en CC.
De volgende uitzonderingen zijn handig wanneer u fouten in beheerde code opspoort.
| Gebeurteniscode | Meaning | Standaardstatus |
|---|---|---|
Clr |
Common Language Runtime-uitzondering |
Tweede kans-pauze Niet verwerkt |
clrn |
Common Language Runtime-meldingsonderzondering |
Tweede kans pauze Verwerkt |
U kunt de onderbrekingsstatus van de volgende gebeurtenissen wijzigen. Omdat deze gebeurtenissen geen uitzonderingen zijn, is de verwerkingsstatus niet relevant.
| Gebeurteniscode | Meaning | Standaardstatus van onderbreking |
|---|---|---|
Ser |
Systeemfout |
Negeren |
cpr[:Process] |
Procesaanmaak Het instellen van de onderbrekingsstatus van deze gebeurtenis is alleen van toepassing op foutopsporing in de gebruikersmodus. Deze gebeurtenis vindt niet plaats in de kernelmodus. U kunt deze gebeurtenis alleen beheren als u foutopsporing van onderliggende processen in CDB of WinDbg hebt geactiveerd, via deopdrachtregeloptie -o of via de opdracht .childdbg (Foutopsporing onderliggende processen). De procesnaam kan een optionele bestandsnaamextensie en een sterretje () of vraagteken (?) bevatten als jokertekens. Het foutopsporingsprogramma onthoudt alleen de meest recente cpr-instelling . Afzonderlijke instellingen voor afzonderlijke processen worden niet ondersteund. Gebruik een dubbele punt of een spatie tussen cpr en Process. Als Process wordt weggelaten, is de instelling van toepassing op het aanmaken van een subproces. |
Negeren |
epr[:Process] |
Procesafsluiten Het instellen van de onderbrekingsstatus van deze gebeurtenis is alleen van toepassing op foutopsporing in de gebruikersmodus. Deze gebeurtenis vindt niet plaats in de kernelmodus. U kunt deze gebeurtenis alleen beheren als u foutopsporing van onderliggende processen in CDB of WinDbg hebt geactiveerd, via deopdrachtregeloptie -o of via de opdracht .childdbg (Foutopsporing onderliggende processen). De procesnaam kan een optionele bestandsnaamextensie en een sterretje () of vraagteken (?) bevatten als jokertekens. Het foutopsporingsprogramma onthoudt alleen de meest recente epr-instelling . Afzonderlijke instellingen voor afzonderlijke processen worden niet ondersteund. Voeg een dubbele punt of een spatie toe tussen epr en Process. Als Process wordt weggelaten, is de instelling van toepassing op alle onderliggende procesbeëindigingen. |
Negeren |
Ct |
Thread maken |
Negeren |
Et |
Thread afsluiten |
Negeren |
ld[:Module] |
Module laden Als u Module opgeeft, treedt het einde op wanneer de module met deze naam wordt geladen. Module kan de naam of het adres van de module opgeven. Als de naam wordt gebruikt, kan module verschillende jokertekens en aanduidingen bevatten. (Zie De syntaxis van jokertekenreeksen voor meer informatie over de syntaxis.) Het foutopsporingsprogramma onthoudt alleen de meest recente ld-instelling. Afzonderlijke instellingen voor afzonderlijke modules worden niet ondersteund. Neem een dubbele punt of een spatie tussen ld en Module op. Als module wordt weggelaten, wordt de gebeurtenis geactiveerd wanneer een module wordt geladen. |
Uitvoer |
ud[:Module] |
Module uitladen Als u Module opgeeft, treedt het einde op wanneer de module met deze naam of op dit basisadres wordt verwijderd. Module kan de naam of het adres van de module opgeven. Als de naam wordt gebruikt, kan module een exacte naam zijn of jokertekens bevatten. Als module een exacte naam is, wordt deze onmiddellijk omgezet naar een basisadres met behulp van de huidige lijst met foutopsporingsprogrammamodules en wordt deze opgeslagen als een adres. Als module jokertekens bevat, wordt de patroontekenreeks bewaard voor latere overeenkomsten wanneer unload-gebeurtenissen plaatsvinden. Zelden heeft de debugger naaminformatie voor unload-gebeurtenissen en komt deze alleen overeen met het basisadres. Als module jokertekens bevat, kan de debugger daarom geen naamvergelijking uitvoeren in dit specifieke geval van het ontladen en stopt het wanneer een module wordt verwijderd. Het foutopsporingsprogramma onthoudt alleen de meest recente ud-instelling . Afzonderlijke instellingen voor afzonderlijke modules worden niet ondersteund. Voeg een dubbele punt of een spatie toe tussen ud en Module. Als module wordt weggelaten, wordt de gebeurtenis geactiveerd wanneer een module wordt geladen. |
Uitvoer |
out[:Output] |
Uitvoer van doelapplicatie Als u Uitvoer opgeeft, treedt het einde alleen op wanneer uitvoer die overeenkomt met het opgegeven patroon wordt ontvangen. Uitvoer kan verschillende jokertekens en aanduidingen bevatten. (Zie De syntaxis van jokertekenreeksen voor meer informatie over de syntaxis.) Uitvoer mag echter geen dubbelpunt of spaties bevatten. De match is niet hoofdlettergevoelig. Gebruik een dubbele punt of spatie tussen uit en Uitvoer. |
Negeren |
ibp |
Eerste onderbrekingspunt (Deze gebeurtenis vindt plaats aan het begin van de foutopsporingssessie en nadat u de doelcomputer opnieuw hebt opgestart.) |
In de gebruikersmodus: Onderbreken. U kunt deze status wijzigen in Negeren met behulp van de opdrachtregeloptie-g. In kernelmodus: Negeren. U kunt deze status wijzigen in Ingeschakeld op verschillende methoden. Zie Crashen en opnieuw opstarten van de doelcomputer voor meer informatie over het wijzigen van deze status. |
iml |
Initiële modulelading (Alleen kernelmodus) |
Negeren. U kunt deze status wijzigen in 'Verbreken' door verschillende methoden. Zie Crashen en opnieuw opstarten van de doelcomputer voor meer informatie over het wijzigen van deze status. |