Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan fånga och hantera undantag i program i användarläge och kernelläge med en mängd olika metoder. Ett aktivt felsökningsprogram, ett felsökningsprogram för postmortem eller en intern felhanteringsrutin är alla vanliga sätt att hantera undantag.
Mer information om prioritetsordningen för dessa olika undantagshanterare finns i Aktivera postmortem-felsökning.
När Microsoft Windows-operativsystemet tillåter att ett felsökningsprogram hanterar ett undantag, bryter programmet som genererade undantaget in i felsökningsprogrammet. Det vill sa att programmet stoppas och felsökningsprogrammet blir aktivt. Felsökningsprogrammet kan sedan hantera undantaget på något sätt eller analysera situationen. Felsökningsprogrammet kan sedan avsluta processen eller låta den fortsätta att köras.
Om felsökningsprogrammet ignorerar undantaget och låter programmet fortsätta att köras letar operativsystemet efter andra undantagshanterare som om det inte fanns något felsökningsprogram. Om undantaget hanteras fortsätter programmet att köras. Men om undantaget förblir ohanterat ges felsökningsprogrammet en andra möjlighet att hantera situationen.
Använda felsökningsprogrammet för att analysera ett undantag
När ett undantag eller en händelse bryter sig in i felsökningsprogrammet kan du använda felsökningsprogrammet för att undersöka koden som körs och det minne som programmet använder. Genom att ändra vissa kvantiteter eller hoppa till en annan punkt i programmet kanske du kan ta bort orsaken till undantaget.
Du kan återuppta körningen genom att utfärda kommandot "gh" ("Go med hanterat undantag") eller "gn" ("Go med ohanterat undantag").
Om du utfärdar gn-kommandot i felsökarens andra möjlighet att hantera undantaget avslutas programmet.
Kernel-Mode undantag
Undantag som inträffar i kernellägeskod är allvarligare än undantag i användarläge. Om undantag i kernelläge inte hanteras utfärdas en buggkontroll och systemet stoppas.
Precis som med användarlägesfel meddelas felsökaren innan felsökningsskärmen (även kallad blå skärm) visas om ett felsökningsprogram i kernelläge är kopplat till systemet. Om inget felsökningsprogram är kopplat visas skärmen för felkontroll. I det här fallet kan operativsystemet skapa en kraschdumpfil.
Kontrollera undantag och händelser från felsökningsprogrammet
Du kan konfigurera felsökningsprogrammet så att det reagerar på angivna undantag och händelser på ett visst sätt.
Felsökningsprogrammet kan ange brytstatus för varje undantag eller händelse:
Händelsen kan orsaka en inbrytning i felsökningsprogrammet så snart den inträffar (den "första chansen").
Händelsen kan brytas in efter att andra felhanterare har fått möjlighet att svara ("andra chansen").
Händelsen kan också skicka ett meddelande till felsökaren men fortsätta att köras.
Felsökningsprogrammet kan ignorera händelsen.
Felsökningsprogrammet kan också ange hanteringsstatus för varje undantag och händelse. Felsökningsprogrammet kan behandla händelsen som ett hanterat undantag eller ett ohanterat undantag. (Naturligtvis kräver händelser som inte är fel inte någon hantering.)
Du kan styra brytstatus och hanteringsläge genom att göra något av följande:
Använd kommandot SXE, SXD, SXN eller SXI i felsökningskommandofönstret.
(CDB och NTSD) Använd alternativet -x, -xe, -xd, -xn eller -xi på kommandoraden.
(CDB, NTSD och KD) Använd nyckelordet sxe eller sxd i filenTools.ini .
(Endast WinDbg) Välj Händelsefilterpå felsökningsmenyn för att öppna dialogrutan Händelsefilter och välj sedan de alternativ som du vill använda.
Kommandot SX\*, kommandoradsalternativet -x\* och sx\* Tools.ini nyckelord anger vanligtvis brytstatus för den angivna händelsen. Du kan lägga till alternativet -h för att göra så att hanteringsstatusen anges i stället.
Det finns fyra särskilda händelsekoder (cc, hc, bpec och ssec) som alltid anger hanteringsstatus i stället för brytstatus.
Du kan visa det senaste undantaget eller händelsen med hjälp av kommandot .lastevent (Visa senaste händelse).
Kontrollera brytstatus
När du anger brytstatus för ett undantag eller en händelse kan du använda följande alternativ.
| Befallning | Statusnamn | Beskrivning |
|---|---|---|
| SXE eller -xe | Paus (Aktiverad) |
När det här undantaget inträffar bryter målet omedelbart in i felsökningsprogrammet. Den här inbrytningen inträffar innan andra felhanterare aktiveras. Den här metoden kallas för hantering av första chansen. |
| SXD eller -xd | Andra chansens paus (Inaktiverad) |
Felsökningsprogrammet bryter inte in för den här typen av undantag från första chansen (även om ett meddelande visas). Om andra felhanterare inte kan hantera det här undantaget, avbryts körningen och programmet hoppar in i felsökningsläget. Den här metoden kallas för hantering av andra chansen. |
| SXN eller -xn | Resultat (Meddela) |
När det här undantaget inträffar bryter inte målprogrammet alls in i felsökningsprogrammet. Ett meddelande visas dock som informerar användaren om det här undantaget. |
| SXI eller -xi | Ignorera |
När det här undantaget inträffar bryts inte målprogrammet in i felsökningsprogrammet och inget meddelande visas. |
Om ett undantag inte förväntas av en SX*-inställning bryter målprogrammet in i felsökningsprogrammet vid den andra chansen. Standardstatusen för händelser visas i följande avsnitt "Händelsedefinitioner och standardvärden" i det här avsnittet.
Om du vill ange brytstatus med det grafiska gränssnittet WinDbg väljer händelsefilterpå felsökningsmenyn den händelse som du vill använda i listan i dialogrutan Händelsefilter och väljer sedan Aktiverad, Inaktiverad, Utdata eller Ignorera.
Kontrollera hanteringsstatus
Alla händelser anses vara ohanterade, såvida du inte använder kommandot gh (Go with Exception Handled).
Alla undantag betraktas som ohanterade, såvida du inte använder kommandot sx\* tillsammans med alternativet -h .
Dessutom kan SX*-alternativ konfigurera hanteringsstatus för ogiltiga handtag, STATUS_BREAKPOINT brytinstruktioner och enstegsundantag. (Den här konfigurationen är separat från deras brytkonfiguration.) När du konfigurerar deras avbrottsstatus får dessa händelser namnet ch, bpe respektive sse. När du konfigurerar deras hanteringsstatus får dessa händelser namnet hc, bpec respektive ssec. (En fullständig lista över händelser finns i avsnittet "Händelsedefinitioner och standardinställningar".)
Du kan konfigurera hanteringsstatusen för CTRL+C-händelsen (cc), men inte dess brytstatus. Om ett program tar emot en CTRL+C-händelse bryter programmet alltid in i felsökningsprogrammet.
När du använder SX*-kommandot på cc-, hc-, bpec- och ssec-händelser , eller när du använder SX*-kommandot tillsammans med alternativet -h i ett undantag, sker följande åtgärder.
| Befallning | Statusnamn | Beskrivning |
|---|---|---|
SXE |
Hanteras |
Händelsen betraktas som hanterad när exekveringen återupptas. |
SXD,SXN,SXI |
Hanteras inte |
Händelsen anses som ohanterad när exekveringen återupptas. |
Om du vill ange hanteringsstatus med det grafiska gränssnittet WinDbg väljer du Händelsefilter på menyn Felsök , väljer den händelse som du vill använda i listan i dialogrutan Händelsefilter och väljer sedan Hanterat eller Inte hanterat.
Automatiska kommandon
Med felsökningsprogrammet kan du också ange kommandon som körs automatiskt om händelsen eller undantaget orsakar en inbrytning i felsökningsprogrammet. Du kan ange en kommandosträng för första chans-avbrottet och en kommandosträng för andra chans-avbrottet. Du kan ange dessa strängar med SX\* kommandot eller Debugg | Händelsefilter. Varje kommandosträng kan innehålla flera kommandon som är avgränsade med semikolon.
Dessa kommandon körs oavsett brytstatus. Om brytstatusen är "Ignorera" körs kommandot fortfarande. Om brytstatusen är "Second-chance break" körs kommandot first-chance när undantaget först inträffar, innan andra undantagshanterare är inblandade. Kommandosträngen kan avslutas med ett körningskommando som g (Go), gh (Go med hanterat undantag), eller gn (Go med ohanterat undantag).
Händelsedefinitioner och standardvärden
Du kan ändra brytstatus eller hanteringsstatus för följande undantag. Deras standardläge för rast anges.
Följande undantags standardhanteringsstatus är alltid "Inte hanterad". Var försiktig med att ändra den här statusen. Om du ändrar den här statusen till "Hanterad" betraktas alla undantag från första chansen och andra chansen av den här typen som hanterade, och den här konfigurationen kringgår alla rutiner för undantagshantering.
| Händelsekod | Innebörd | Standardstatus för avbrott |
|---|---|---|
asrt |
Assertionsfel |
Paus |
av |
Åtkomstöverträdelse |
Paus |
dm |
Feljusterade data |
Paus |
Dz |
Heltalsdivision med noll som nämnare |
Paus |
c000008e |
Flyttalsdivision med noll |
Paus |
Eh |
C++ EH-undantag |
Andra chansens paus |
Gp |
Brott mot skyddssidan |
Paus |
ii |
Otillåten instruktion |
Andra chansens paus |
iov |
Heltalsöverflöd |
Paus |
ip |
I/O-fel på sidan |
Paus |
Isc |
Ogiltigt systemanrop |
Paus |
lsq |
Ogiltig låssekvens |
Paus |
sbo |
Stackbuffertöverskridande |
Paus |
sov |
Stacköverflöd |
Paus |
wkd |
Väck debuggare |
Paus |
aph |
Programlåsning Det här undantaget utlöses om Windows-operativsystemet drar slutsatsen att en process har slutat svara (det vill säga är låst). |
Paus |
3c |
Barnapplikationsavslutning |
Andra chansens paus |
chhc |
Ogiltigt handtag |
Paus |
Nummer |
Valfritt numrerat undantag |
Andra chansens paus |
Notera Du kan åsidosätta brytstatusen för asrt för en specifik adress med hjälp av kommandot ah (Satshantering) Händelsekoderna ch och hc refererar till samma undantag. När du styr dess brytstatus använder du sx* ch. När du styr dess hanteringsstatus använder du sx* hc.
Du kan ändra brytstatus eller hanteringsstatus för följande undantag. Deras standardbrytstatus är angiven.
Följande undantags standardhanteringsstatus är alltid "Hanterad". Eftersom dessa undantag används för att kommunicera med felsökningsprogrammet bör du vanligtvis inte ändra deras status till "Inte hanterad". Den här statusen gör att andra undantagshanterare fångar undantagen om felsökaren ignorerar dem.
Ett program kan använda DBG_COMMAND_EXCEPTION (dbce) för att kommunicera med felsökningsprogrammet. Det här undantaget liknar en brytpunkt, men du kan använda SX*-kommandot för att reagera på ett specifikt sätt när det här undantaget inträffar.
| Händelsekod | Innebörd | Standardstatus för avbrott |
|---|---|---|
dbce |
Undantag för särskilt felsökningskommando |
Ignorera |
vcpp |
Speciellt Visual C++-undantag |
Ignorera |
wos |
WOW64-undantag i ett steg |
Paus |
wob |
WOW64-brytpunktsundantag- |
Paus |
Sse |
Undantag i ett steg |
Paus |
bpe |
Brytpunktsundantag |
Paus |
cce |
CTRL+C eller CTRL+BREAK Det här undantaget utlöses om målet är ett konsolprogram och CTRL+C eller CTRL+BREAK skickas till det. |
Paus |
Not De sista tre undantagen i föregående tabell har två olika händelsekoder. När du styr deras avbrottsstatus använder du sse, bpe och cce. När du styr deras hanteringsstatus använder du ssec, bpec och cc.
Följande undantag är användbara när du felsöker hanterad kod.
| Händelsekod | Innebörd | Standardstatus |
|---|---|---|
Clr |
Common Language Runtime-undantag |
Andra chansens paus Hanteras inte |
clrn |
Undantag för Common Language Runtime-meddelanden |
Andra chansens paus Hanterad |
Du kan ändra avbrottsstatusen för följande händelser. Eftersom dessa händelser inte är undantag är deras hanteringsstatus irrelevant.
| Händelsekod | Innebörd | Standardstatus för avbrott |
|---|---|---|
ser |
Systemfel |
Ignorera |
cpr[:Process] |
Skapa process Att ange avbrottsstatus för den här händelsen gäller endast felsökning i användarläge. Den här händelsen inträffar inte i kernelläge. Du kan bara styra den här händelsen om du har aktiverat felsökning av underordnade processer i CDB eller WinDbg, antingen viakommandoradsalternativet -o eller via kommandot .childdbg (Debug Child Processes). Processnamnet kan innehålla ett valfritt filnamnstillägg och en asterisk () eller ett frågetecken (?) som jokertecken. Felsökaren kommer bara ihåg den senaste cpr-inställningen . Separata inställningar för separata processer stöds inte. Inkludera ett kolon eller ett blanksteg mellan cpr och Process. Om Process utelämnas gäller inställningen för alla skapade underprocesser. |
Ignorera |
epr[:Process] |
Processen avslutas Att ange avbrottsstatus för den här händelsen gäller endast felsökning i användarläge. Den här händelsen inträffar inte i kernelläge. Du kan bara styra den här händelsen om du har aktiverat felsökning av underordnade processer i CDB eller WinDbg, antingen viakommandoradsalternativet -o eller via kommandot .childdbg (Debug Child Processes). Processnamnet kan innehålla ett valfritt filnamnstillägg och en asterisk () eller ett frågetecken (?) som jokertecken. Felsökningsprogrammet kommer bara ihåg den senaste epr-inställningen . Separata inställningar för separata processer stöds inte. Inkludera ett kolon eller ett blanksteg mellan epr och Process. Om Processen utelämnas gäller inställningen för alla underordnade processer som avslutas. |
Ignorera |
ct |
Skapa tråd |
Ignorera |
Et |
Trådavslut |
Ignorera |
ld[:Module] |
Läs in modulen Om du anger Modul inträffar pausen när modulen med det här namnet läses in. Modulen kan ange namnet eller adressen för modulen. Om namnet används kan Module innehålla en mängd olika jokertecken och specificerare. (Mer information om syntaxen finns i Strängsyntax för jokertecken.) Felsökaren kommer bara ihåg den senaste ld-inställningen . Separata inställningar för separata moduler stöds inte. Inkludera ett kolon eller ett blanksteg mellan ld och Modul. Om Modul utelämnas utlöses händelsen när en modul läses in. |
Utgång |
ud[:Module] |
Ta bort modul Om du anger Modul inträffar avbrottet när modulen med det här namnet, eller vid den här basadressen, avlastas. Modulen kan ange namnet eller adressen för modulen. Om namnet används kan Module vara ett exakt namn eller innehålla jokertecken. Om Modulen är ett exakt namn matchas den omedelbart till en basadress med hjälp av den aktuella listan över felsökningsmoduler och lagras som en adress. Om Modulen innehåller jokertecken sparas mönstersträngen för senare matchning när avladdningshändelser inträffar. Det är sällsynt att felsökaren saknar namninformation för avladdningshändelser och endast matchar basadressen. Om Modulen innehåller jokertecken kan felsökaren därför inte utföra en namnmatchning i det här avlastningsfallet och pauser när någon modul tas bort. Felsökningsprogrammet kommer bara ihåg den senaste ud-inställningen . Separata inställningar för separata moduler stöds inte. Inkludera ett kolon eller ett blanksteg mellan ud och Modul. Om Modul utelämnas utlöses händelsen när en modul läses in. |
Utgång |
out[:Output] |
Målprogramutdata Om du anger Utdata sker brytningen endast när utdata som matchar det angivna mönstret tas emot. Utdata kan innehålla en mängd wildcard-tecken och specifierare. (Mer information om syntaxen finns i Strängsyntax för jokertecken.) Utdata får dock inte innehålla kolon eller mellanslag. Matchningen är inte skiftlägeskänslig. Inkludera ett kolon eller blanksteg mellan ut och utdata. |
Ignorera |
ibp |
Inledande brytpunkt (Den här händelsen inträffar i början av felsökningssessionen och när du har startat om måldatorn.) |
I användarläge: Paus. Du kan ändra den här statusen till "Ignorera" med hjälp av kommandoradsalternativet-g. I kernelläge: Bortse från. Du kan ändra den här statusen till "Aktiverad" med en mängd olika metoder. För mer information om hur du ändrar den här statusen, se "Krascha och starta om måldatorn". |
iml |
Inledande modulinläsning (Endast kernel-läge) |
Ignorera Du kan ändra den här statusen till "Break" med en mängd olika metoder. För mer information om hur du ändrar den här statusen, se Crashing and Rebooting the Target Computer. |