Einbruch in den Debugger
Benutzermodus- und Kernelmoduscode verwenden verschiedene Routinen, um den Debugger zu unterbrechen.
User-Mode Pausenroutinen
Eine Unterbrechungsroutine bewirkt, dass im aktuellen Prozess eine Ausnahme auftritt, sodass der aufrufende Thread den Debugger signalisieren kann, der dem aufrufenden Prozess zugeordnet ist.
Verwenden Sie die DebugBreak-Funktion, um einen Debugger aus einem Benutzermodusprogramm zu unterbrechen. Sein Prototyp ist wie folgt:
VOID DebugBreak(VOID);
Wenn ein Benutzermodusprogramm DebugBreak aufruft, werden die folgenden möglichen Aktionen ausgeführt:
Wenn ein Benutzermodusdebugger angefügt ist, wird das Programm in den Debugger unterteilt. Dies bedeutet, dass das Programm angehalten wird und der Debugger aktiv wird.
Wenn kein Benutzermodusdebugger angefügt ist, aber das Debuggen im Kernelmodus zum Startzeitpunkt aktiviert wurde, wird der gesamte Computer in den Kerneldebugger eingebunden. Wenn kein Kerneldebugger angefügt ist, friert der Computer ein und wartet auf einen Kerneldebugger.
Wenn kein Benutzermodusdebugger angefügt ist und das Debuggen im Kernelmodus nicht aktiviert ist, wird das Programm mit einer nicht behandelten Ausnahme beendet, und der Post-Mortem-Debugger (Just-In-Time) wird aktiviert. Weitere Informationen finden Sie unter Aktivieren des Postmortemdebuggens.
Kernel-Mode Pausenroutinen
Wenn ein Kernelmodusprogramm in den Debugger einbricht, friert das gesamte Betriebssystem ein, bis der Kerneldebugger die Fortsetzung der Ausführung zulässt. Wenn kein Kerneldebugger vorhanden ist, wird dies als Fehlerprüfung behandelt.
Die DbgBreakPoint-Routine funktioniert im Kernelmoduscode, ähnelt aber ansonsten der DebugBreak-Benutzermodusroutine.
Die DbgBreakPointWithStatus-Routine verursacht ebenfalls eine Unterbrechung, sendet aber zusätzlich einen 32-Bit-status Code an den Debugger.
Die Routinen KdBreakPoint und KdBreakPointWithStatus sind identisch mit DbgBreakPoint bzw . DbgBreakPointWithStatus, wenn sie in der überprüften Buildumgebung kompiliert werden. Wenn sie in der kostenlosen Buildumgebung kompiliert werden, haben sie keine Auswirkungen.
Kernel-Mode bedingten Unterbrechungsroutinen
Für Kernelmoduscode stehen zwei bedingte Unterbrechungsroutinen zur Verfügung. Diese Routinen testen einen logischen Ausdruck. Wenn der Ausdruck false ist, wird die Ausführung angehalten, und der Debugger wird aktiv.
Das ASSERT-Makro testet einen logischen Ausdruck. Wenn der Ausdruck false ist, wird die Ausführung angehalten, und der Debugger wird aktiv. Der fehlerhafte Ausdruck und sein Speicherort im Programm werden im Debugger angezeigt.
Das ASSERTMSG-Makro ist identisch mit ASSERT , mit der Ausnahme, dass eine zusätzliche Nachricht an den Debugger gesendet werden kann.
ASSERT und ASSERTMSG sind nur aktiv, wenn sie in der überprüften Buildumgebung kompiliert werden. Wenn sie in der kostenlosen Buildumgebung kompiliert werden, haben sie keine Auswirkungen.