Bryta sig in i felsökningsprogrammet

Användarläge och kernellägeskod använder olika rutiner för att bryta sig in i felsökningsprogrammet.

User-Mode Bryt rutiner

En avbrottsrutin gör att ett undantag inträffar i den aktuella processen, så att den anropande tråden kan signalera det felsökningsprogram som är associerat med anropsprocessen.

Om du vill bryta dig in i ett felsökningsprogram från ett användarlägesprogram använder du funktionen DebugBreak. Prototypen är följande:

VOID DebugBreak(VOID);

När ett användarlägesprogram anropar DebugBreak sker följande möjliga åtgärder:

  1. Om ett felsökningsprogram i användarläge är kopplat kommer programmet att bryta sig in i felsökningsprogrammet. Det innebär att programmet pausas och felsökningsprogrammet blir aktivt.

  2. Om ett felsökningsprogram i användarläge inte är anslutet, men felsökning i kernelläge var aktiverat vid start, kommer hela datorn att bryta sig in i kernelfelsökaren. Om en kernelfelsökare inte är ansluten fryser datorn och väntar på en kernelfelsökare.

  3. Om ett felsökningsprogram i användarläge inte är kopplat och felsökning i kernelläge inte är aktiverat avslutas programmet med ett ohanterat undantag och felsökningsprogrammet efter döden (just-in-time) aktiveras. Mer information finns i Aktivera felsökning av postmortem.

Kernel-Mode Bryta rutiner

När ett kernellägesprogram bryter sig in i felsökningsprogrammet låses hela operativsystemet tills kernelfelsökaren tillåter att körningen återupptas. Om det inte finns något kernelfelsökare behandlas detta som en buggkontroll.

DbgBreakPoint-rutinen fungerar i kernellägeskod, men liknar annars rutinen DebugBreak-användarläge.

Rutinen DbgBreakPointWithStatus orsakar också en paus, men den skickar dessutom en 32-bitars statuskod till felsökningsprogrammet.

Rutinerna KdBreakPoint och KdBreakPointWithStatus är identiska med DbgBreakPoint respektive DbgBreakPointWithStatus när de kompileras i den kontrollerade byggmiljön. När de kompileras i den kostnadsfria byggmiljön har de ingen effekt.

Kernel-Mode villkorliga brytrutiner

Två villkorliga brytrutiner är tillgängliga för kod i kernelläge. Dessa rutiner testar ett logiskt uttryck. Om uttrycket är falskt stoppas körningen och felsökningsprogrammet blir aktivt.

  • ASSERT-makrot testar ett logiskt uttryck. Om uttrycket är falskt stoppas körningen och felsökningsprogrammet blir aktivt. Det misslyckade uttrycket och dess plats i programmet visas i felsökningsprogrammet.

  • ASSERTMSG-makrot är identiskt med ASSERT förutom att ett ytterligare meddelande kan skickas till felsökningsprogrammet.

ASSERT och ASSERTMSG är endast aktiva när de kompileras i den kontrollerade byggmiljön. När de kompileras i den kostnadsfria byggmiljön har de ingen effekt.