Kommentar
Å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.
När ett maskinvaru- eller programvaruundundanstag inträffar stoppar processorn körningen vid den tidpunkt då undantaget inträffade och överför kontrollen till systemet. Först sparar systemet både datortillståndet för den aktuella tråden och information som beskriver undantaget. Systemet försöker sedan hitta en undantagshanterare för att hantera undantaget.
Datortillståndet för tråden där undantaget inträffade sparas i en CONTEXT- struktur. Med den här informationen (kallas -kontextposten) kan systemet fortsätta att köras vid tidpunkten för undantaget om undantaget hanteras. Beskrivningen av undantaget (kallas undantagspost) sparas i en EXCEPTION_RECORD struktur. Eftersom den lagrar datorberoende information för kontextposten separat från den datoroberoende informationen i undantagsposten är mekanismen för undantagshantering portabel till olika plattformar.
Informationen i både kontext- och undantagsposterna är tillgänglig med hjälp av funktionen GetExceptionInformation och kan göras tillgänglig för alla undantagshanterare som körs till följd av undantaget. Undantagsposten innehåller följande information.
- En undantagskod som identifierar typen av undantag.
- Flaggor som anger om undantaget kan fortsätta. Alla försök att fortsätta körningen efter ett icke-kontinuerligt undantag genererar ett annat undantag.
- En pekare till en annan undantagspost. Detta underlättar skapandet av en länkad lista över undantag om kapslade undantag inträffar.
- Adressen där undantaget inträffade.
- En matris med argument som ger ytterligare information om undantaget.
När ett undantag inträffar i kod i användarläge använder systemet följande sökordning för att hitta en undantagshanterare:
- Om processen debuggas meddelar systemet felsökningsprogrammet. Mer information finns i Undantagshantering av felsökningsprogram.
- Om processen inte debuggas, eller om det associerade felsökningsprogrammet inte hanterar undantaget, försöker systemet hitta en rambaserad undantagshanterare genom att söka i stackramarna i tråden där undantaget inträffade. Systemet söker först igenom den aktuella stackramen och söker sedan igenom föregående stackramar i omvänd ordning.
- Om ingen rambaserad hanterare kan hittas, eller om ingen rambaserad hanterare hanterar undantaget, men processen debuggas, meddelar systemet felsökaren en andra gång.
- Om processen inte debuggas, eller om det associerade felsökningsprogrammet inte hanterar undantaget, tillhandahåller systemet standardhantering baserat på undantagstypen. För de flesta undantag är standardåtgärden att anropa funktionen ExitProcess.
När ett undantag inträffar i kernellägeskod söker systemet igenom stackramarna i kernelstacken i ett försök att hitta en undantagshanterare. Om en hanterare inte kan hittas eller om ingen hanterare hanterar undantaget stängs systemet av som om funktionen ExitWindows hade anropats.