Control de excepciones del depurador

El control del sistema de excepciones en modo de usuario proporciona compatibilidad con depuradores sofisticados. Si se está depurando el proceso en el que se produce una excepción, el sistema genera un evento de depuración. Si el depurador usa la función WaitForDebugEvent , el evento de depuración hace que esa función devuelva con un puntero a una estructura de DEBUG_EVENT . Esta estructura contiene los identificadores de proceso y subproceso que el depurador puede usar para acceder al registro de contexto del subproceso. La estructura también contiene una estructura EXCEPTION_DEBUG_INFO que incluye una copia del registro de excepción.

Cuando el sistema busca un controlador de excepciones, realiza dos intentos de notificar al depurador de un proceso. El primer intento de notificación proporciona al depurador una oportunidad para controlar el punto de interrupción o las excepciones de un solo paso. Esto se conoce como notificación de primera oportunidad. A continuación, el usuario puede emitir comandos del depurador para manipular el entorno del proceso antes de que se ejecuten los controladores de excepciones. El segundo intento de notificar al depurador solo se produce si el sistema no encuentra un controlador de excepciones basado en fotogramas que controla la excepción. Esto se conoce como notificación de última oportunidad. Si el depurador no controla la excepción después de la notificación de última oportunidad, el sistema finaliza el proceso que se está depurando.

En cada intento de notificación, el depurador usa la función ContinueDebugEvent para devolver el control al sistema. Antes de devolver el control, el depurador puede controlar la excepción y modificar el estado del subproceso según corresponda, o bien puede optar por no controlar la excepción. Con ContinueDebugEvent, el depurador puede indicar que ha controlado la excepción, en cuyo caso se restaura el estado de la máquina y la ejecución del subproceso continúa en el momento en que se produjo la excepción. El depurador también puede indicar que no controló la excepción, lo que hace que el sistema continúe su búsqueda de un controlador de excepciones.