Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Behandlung von Benutzermodusausnahmen im System bietet Unterstützung für anspruchsvolle Debugger. Wenn der Prozess, in dem eine Ausnahme auftritt, debuggt 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ückgegeben wird. 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 Ausnahmedatensatzes enthält.
Wenn das System nach einem Ausnahmehandler sucht, versucht es zwei Versuche, den Debugger eines Prozesses zu benachrichtigen. Der erste Benachrichtigungsversuch bietet dem Debugger die Möglichkeit, Breakpoint- oder Einzelschrittausnahmen zu behandeln. Dies wird als Erste-Chance-Benachrichtigung bezeichnet. Der Benutzer kann dann Debuggerbefehle ausgeben, um die Umgebung des Prozesses zu bearbeiten, bevor Ausnahmehandler ausgeführt werden. Der zweite Versuch, den Debugger zu benachrichtigen, tritt nur auf, wenn das System keinen framebasierten Ausnahmehandler finden kann, der die Ausnahme behandelt. Dies wird als Benachrichtigung der letzten Chance bezeichnet. Wenn der Debugger die Ausnahme nach der Benachrichtigung zur letzten Chance nicht behandelt, beendet das System den zu debuggenden Prozess.
Bei jedem Benachrichtigungsversuch verwendet der Debugger die ContinueDebugEvent-Funktion , um die Steuerung an das System zurückzugeben. Bevor die Steuerung zurückgegeben wird, kann der Debugger die Ausnahme behandeln und den Threadstatus entsprechend ändern, oder er kann die Ausnahme nicht behandeln. Mithilfe von ContinueDebugEvent kann der Debugger angeben, dass er die Ausnahme behandelt hat. In diesem Fall wird der Computerzustand wiederhergestellt und die Threadausführung an dem Punkt fortgesetzt, an dem die Ausnahme aufgetreten ist. Der Debugger kann auch angeben, dass er die Ausnahme nicht verarbeitet hat, wodurch das System seine Suche nach einem Ausnahmehandler fortsetzen kann.