Compartir a través de


Control de excepciones (SDK de Visual Studio)

A continuación se describe el proceso que se produce cuando se producen excepciones.

Proceso de control de excepciones

  1. Cuando se produce una excepción por primera vez, pero antes de controlarla el controlador de excepciones en el programa que se está depurando, el motor de depuración (DE) envía un IDebugExceptionEvent2 al administrador de depuración de sesión (SDM) como evento de detención. IDebugExceptionEvent2 Se envía si solo la configuración de la excepción (especificada en el cuadro de diálogo Excepciones del paquete de depuración) especifica que el usuario quiere detener las notificaciones de excepción de primera oportunidad.

  2. El SDM llama a IDebugExceptionEvent2::GetException para obtener la propiedad de excepción.

  3. El paquete de depuración llama a IDebugExceptionEvent2::CanPassToDebuggee para determinar qué opciones presentar al usuario.

  4. El paquete de depuración pregunta al usuario cómo controlar la excepción abriendo un cuadro de diálogo de excepción de primera oportunidad.

  5. Si el usuario decide continuar, sdM llama a IDebugExceptionEvent2::CanPassToDebuggee.

    • Si el método devuelve S_OK, llama a IDebugExceptionEvent2::P assToDebuggee.

      o bien

      Si el método devuelve S_FALSE, el programa que se depura se da una segunda oportunidad para controlar la excepción.

  6. Si el programa que se depura no tiene ningún controlador para una excepción de segunda oportunidad, el DE envía un IDebugExceptionEvent2 al SDM como EVENT_SYNC_STOP.

  7. El paquete de depuración pregunta al usuario cómo controlar la excepción abriendo un cuadro de diálogo de excepción de primera oportunidad.

  8. El paquete de depuración llama a IDebugExceptionEvent2::CanPassToDebuggee para determinar qué opciones presentar al usuario.

  9. El paquete de depuración pregunta al usuario cómo controlar la excepción abriendo un cuadro de diálogo de excepción de segunda oportunidad.

  10. Si el método devuelve S_OK, llama a IDebugExceptionEvent2::PassToDebuggee.