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 ser gestionada por 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 interrupció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 las propiedades de la 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 en primera instancia.

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

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

      O bien:

      Si el método devuelve S_FALSE, se le da al programa que se está depurando una segunda oportunidad para manejar la excepción.

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

  7. Al abrir un cuadro de diálogo de excepción de primera oportunidad, el paquete de depuración pregunta al usuario cómo controlar la excepción.

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

  9. El paquete de depuración solicita al usuario cómo manejar la excepción al abrir un cuadro de diálogo de excepción de segunda oportunidad.

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