Ausnahmebehandlung für Debugger
Die Behandlung von Benutzermodusausnahmen durch das System bietet Unterstützung für anspruchsvolle Debugger. Wenn der Prozess, in dem eine Ausnahme auftritt, gedebuggt wird, generiert das System ein Debugereignis. Wenn der Debugger die WaitForDebugEvent-Funktion verwendet, bewirkt das Debugereignis, dass diese Funktion mit einem Zeiger auf eine DEBUG _ EVENT-Struktur zurückkehrt. Diese Struktur enthält die Prozess- und Threadbezeichner, die der Debugger für den Zugriff auf den Kontextdatensatz des Threads verwenden kann. Die -Struktur enthält auch eine EXCEPTION _ DEBUG _ INFO-Struktur, die eine Kopie des Ausnahmedatensatz enthält.
Wenn das System nach einem Ausnahmehandler sucht, werden zwei Versuche unternommen, den Debugger eines Prozesses zu benachrichtigen. Der erste Benachrichtigungsversuch bietet dem Debugger die Möglichkeit, Haltepunkt- oder Einzelschrittausnahmen zu behandeln. Dies wird als Erste-Chance-Benachrichtigung bezeichnet. Der Benutzer kann dann Debuggerbefehle ausführen, um die Umgebung des Prozesses zu bearbeiten, bevor Ausnahmehandler ausgeführt werden. Der zweite Versuch, den Debugger zu benachrichtigen, erfolgt nur, wenn das System keinen framebasierten Ausnahmehandler finden kann, der die Ausnahme behandelt. Dies wird als Benachrichtigung mit letzter Chance bezeichnet. Wenn der Debugger die Ausnahme nach der Benachrichtigung der letzten Chance nicht behandelt, beendet das System den debuggten Prozess.
Bei jedem Benachrichtigungsversuch verwendet der Debugger die ContinueDebugEvent-Funktion, um die Steuerung an das System zurück zu geben. Vor dem Zurückgeben der Steuerung kann der Debugger die Ausnahme behandeln und den Threadzustand entsprechend ändern, oder er kann die Ausnahme nicht behandeln. Mit ContinueDebugEvent kann der Debugger angeben, dass er die Ausnahme behandelt hat. In diesem Fall wird der Computerzustand wiederhergestellt, und die Threadausführung wird an dem Punkt fortgesetzt, an dem die Ausnahme aufgetreten ist. Der Debugger kann auch angeben, dass er die Ausnahme nicht behandelt hat, wodurch das System seine Suche nach einem Ausnahmehandler fortsetzen kann.