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.
En felsökningshändelse är en incident i processen som debuggas som gör att systemet meddelar felsökningsprogrammet. Felsökningshändelser omfattar att skapa en process, skapa en tråd, läsa in ett DLL (Dynamic Link Library), ta bort en DLL, skicka en utdatasträng och generera ett undantag.
Om en felsökningshändelse inträffar medan ett felsökningsprogram väntar på en, fyller systemet den DEBUG_EVENT struktur som anges av WaitForDebugEvent med information som beskriver händelsen.
När systemet meddelar felsökaren för en felsökningshändelse pausas även alla trådar i den berörda processen. Trådarna återupptar inte körningen förrän felsökningsprogrammet fortsätter felsökningshändelsen med hjälp av ContinueDebugEvent. Följande felsökningshändelser kan inträffa när en process kopplas från.
| Felsökningshändelse | Beskrivning |
|---|---|
| CREATE_PROCESS_DEBUG_EVENT |
Genereras när en ny process skapas i en process som debuggas eller när felsökaren börjar felsöka en redan aktiv process. Systemet genererar den här felsökningshändelsen innan processen börjar köras i användarläge och innan systemet genererar andra felsökningshändelser för den nya processen. Den DEBUG_EVENT strukturen innehåller en CREATE_PROCESS_DEBUG_INFO struktur. Den här strukturen innehåller ett handtag till den nya processen, ett handtag till processens bildfil, ett handtag till processens första tråd och annan information som beskriver den nya processen. Handtaget till processen har PROCESS_VM_READ och PROCESS_VM_WRITE åtkomst. Om ett felsökningsprogram har dessa typer av åtkomst till en tråd kan det läsa och skriva till processens minne med hjälp av funktionerna ReadProcessMemory och WriteProcessMemory. Om systemet tidigare rapporterade en EXIT_PROCESS_DEBUG_EVENT händelse stänger systemet handtaget när felsökaren anropar funktionen ContinueDebugEvent. Handtaget till processens bildfil har GENERIC_READ åtkomst och öppnas för läsdelning. Felsökningsprogrammet bör stänga handtaget vid bearbetning av CREATE_PROCESS_DEBUG_EVENT. Handtaget till processens inledande tråd har THREAD_GET_CONTEXT, THREAD_SET_CONTEXT och THREAD_SUSPEND_RESUME åtkomst till tråden. Om ett felsökningsprogram har dessa typer av åtkomst till en tråd kan den läsa från och skriva till trådens register med hjälp av GetThreadContext och SetThreadContext funktioner och kan pausa och återuppta tråden med hjälp av SuspendThread och ResumeThread funktioner. Om systemet tidigare rapporterade en EXIT_PROCESS_DEBUG_EVENT händelse stänger systemet handtaget när felsökaren anropar funktionen ContinueDebugEvent. |
| CREATE_THREAD_DEBUG_EVENT |
Genereras när en ny tråd skapas i en process som debuggas eller när felsökningsprogrammet börjar felsöka en redan aktiv process. Den här felsökningshändelsen genereras innan den nya tråden börjar köras i användarläge. Den DEBUG_EVENT strukturen innehåller en CREATE_THREAD_DEBUG_INFO struktur. Den här strukturen innehåller ett handtag till den nya tråden och trådens startadress. Handtaget har THREAD_GET_CONTEXT, THREAD_SET_CONTEXT och THREAD_SUSPEND_RESUME åtkomst till tråden. Om ett felsökningsprogram har dessa typer av åtkomst till en tråd kan den läsa från och skriva till trådens register med hjälp av GetThreadContext och SetThreadContext funktioner och kan pausa och återuppta tråden med hjälp av SuspendThread och ResumeThread funktioner. Om systemet tidigare rapporterade en EXIT_THREAD_DEBUG_EVENT händelse stänger systemet handtaget till den nya tråden när felsökaren anropar funktionen ContinueDebugEvent. |
| EXCEPTION_DEBUG_EVENT |
Genereras när ett undantag inträffar i processen som debugged. Möjliga undantag är försök att komma åt otillgängligt minne, köra brytpunktsinstruktioner, försöka dividera med noll eller något annat undantag som anges i Strukturerad undantagshantering. Den DEBUG_EVENT strukturen innehåller en EXCEPTION_DEBUG_INFO struktur. Den här strukturen beskriver undantaget som orsakade felsökningshändelsen. Förutom standardvillkor för undantag kan ytterligare en undantagskod inträffa under felsökning av konsolprocesser. Systemet genererar en DBG_CONTROL_C undantagskod när CTRL+C matas in i en konsolprocess som hanterar CTRL+C-signaler och som debuggas. Den här undantagskoden är inte avsedd att hanteras av program. Ett program bör aldrig använda en undantagshanterare för att hantera det. Det utlöses endast till förmån för felsökningsprogrammet och används endast när ett felsökningsprogram är kopplat till konsolprocessen. Om en process inte debuggas eller om felsökaren skickar det DBG_CONTROL_C undantaget ohanterat (via gn-kommandot) genomsöks programmets lista över hanteringsfunktioner, enligt dokumentationen för SetConsoleCtrlHandler-funktionen. Om felsökaren hanterar undantaget DBG_CONTROL_C (via kommandot gh) kommer ett program inte att märka CTRL+C förutom i koden som den här. while ((inputChar = getchar()) != EOF) ...Det innebär att felsökaren inte kan användas för att stoppa läsningsväntningen i sådan kod från att avslutas. |
| EXIT_PROCESS_DEBUG_EVENT |
Genereras när den sista tråden i en process som debugged avslutas. Den här felsökningshändelsen inträffar omedelbart efter att systemet tar bort processens DLL:er och uppdaterar processens slutkod. Den DEBUG_EVENT strukturen innehåller en EXIT_PROCESS_DEBUG_INFO struktur som anger slutkoden. Felsökningsprogrammet frigör eventuella interna strukturer som är associerade med processen vid mottagandet av den här felsökningshändelsen. Systemet stänger felsökningsprogrammets handtag till den avslutande processen och alla processens trådar. Felsökningsprogrammet bör inte stänga dessa referenser. Det går inte att slutföra kernellägesdelen av processavstängningen förrän felsökaren som tar emot den här händelsen anropar ContinueDebugEvent. Tills dess är processhandtagen öppna och det virtuella adressutrymmet släpps inte, så felsökaren kan undersöka den underordnade processen. Om du vill få ett meddelande när kernellägesdelen av processavstängningen är klar duplicerar du handtaget som returneras med CREATE_PROCESS_DEBUG_EVENT, anropar ContinueDebugEventoch väntar sedan på att det duplicerade processhandtaget ska signaleras. |
| EXIT_THREAD_DEBUG_EVENT |
Genereras när en tråd som ingår i en process som debugged avslutas. Systemet genererar den här felsökningshändelsen direkt efter att trådens slutkod har uppdaterats. Den DEBUG_EVENT strukturen innehåller en EXIT_THREAD_DEBUG_INFO struktur som anger slutkoden. Den här felsökningshändelsen inträffar inte om den avslutande tråden är den sista tråden i en process. I det här fallet inträffar den EXIT_PROCESS_DEBUG_EVENT felsökningshändelsen i stället. Felsökningsprogrammet frigör eventuella interna strukturer som är associerade med tråden vid mottagandet av den här felsökningshändelsen. Systemet stänger felsökningsprogrammets handtag till den utgående tråden. Felsökningsprogrammet bör inte stänga det här handtaget. |
| LOAD_DLL_DEBUG_EVENT |
Genereras när en process som debugged läser in en DLL. Den här felsökningshändelsen inträffar när systeminläsaren löser länkar till en DLL eller när den felsökta processen använder funktionen LoadLibrary. Den här felsökningshändelsen inträffar bara första gången systemet kopplar en DLL till det virtuella adressutrymmet i en process. Den DEBUG_EVENT strukturen innehåller en LOAD_DLL_DEBUG_INFO struktur. Den här strukturen innehåller ett handtag till den nyligen inlästa DLL:en, basadressen för DLL:en och annan information som beskriver DLL:en. Felsökningsprogrammet bör stänga handtaget till DLL-handtaget vid bearbetning av LOAD_DLL_DEBUG_EVENT. Normalt läser ett felsökningsprogram in en symboltabell som är associerad med DLL vid mottagandet av den här felsökningshändelsen. |
| OUTPUT_DEBUG_STRING_EVENT |
Genereras när en process som debugged använder Funktionen OutputDebugString. Den DEBUG_EVENT strukturen innehåller en OUTPUT_DEBUG_STRING_INFO struktur. Den här strukturen anger adress, längd och format för felsökningssträngen. |
| UNLOAD_DLL_DEBUG_EVENT |
Genereras när en process som debuggas tar bort en DLL med hjälp av funktionen FreeLibrary. Den här felsökningshändelsen inträffar bara den senaste gången en DLL tas bort från en processs adressutrymme (d.s. när DLL-användningsantalet är noll). Den DEBUG_EVENT strukturen innehåller en UNLOAD_DLL_DEBUG_INFO struktur. Den här strukturen anger basadressen för DLL i adressutrymmet för den process som tar bort DLL:en. Normalt tar ett felsökningsprogram bort en symboltabell som är associerad med DLL när den här felsökningshändelsen tas emot. När en process avslutas tar systemet automatiskt bort processens DLL:er, men genererar inte en UNLOAD_DLL_DEBUG_EVENT felsökningshändelse. |
| RIP_EVENT |
Genereras när en process som debuggas dör utanför kontrollen av systemfelsökaren. Den DEBUG_EVENT strukturen innehåller en RIP_INFO struktur. Den här strukturen anger fel och typ av fel. |