IDebugStackFrame3::InterceptCurrentException
Lo llama el depurador en el marco de pila actual cuando quiere interceptar la excepción actual.
Sintaxis
Parámetros
dwFlags
[in] Especifica diferentes acciones. Actualmente, solo se admite el valor IEA_INTERCEPT
de INTERCEPT_EXCEPTION_ACTION y se debe especificar.
pqwCookie
[out] Valor único que identifica una excepción determinada.
Valor devuelto
Si se ejecuta correctamente, devuelve S_OK; de lo contrario, devuelve un código de error.
A continuación se muestran los valores de error más comunes.
Error | Descripción |
---|---|
E_EXCEPTION_CANNOT_BE_INTERCEPTED |
No se puede interceptar la excepción actual. |
E_EXCEPTION_CANNOT_UNWIND_ABOVE_CALLBACK |
Todavía no se ha buscado un controlador en el marco de ejecución actual. |
E_INTERCEPT_CURRENT_EXCEPTION_NOT_SUPPORTED |
Este método no se admite para este marco. |
Comentarios
Cuando se produce una excepción, el depurador obtiene el control del tiempo de ejecución en los puntos clave durante el proceso de control de excepciones. Durante estos momentos clave, el depurador puede preguntar al marco de pila actual si el marco quiere interceptar la excepción. De esta manera, una excepción interceptada es básicamente un controlador de excepciones sobre la marcha para un marco de pila, incluso si ese marco de pila no tiene un controlador de excepciones (por ejemplo, un bloque try/catch en el código del programa).
Cuando el depurador quiere saber si se debe interceptar la excepción, llama a este método en el objeto de marco de pila actual. Este método es responsable de controlar todos los detalles de la excepción. Si la interfaz IDebugStackFrame3 no se implementa o el InterceptStackException
método devuelve ningún error, el depurador continúa procesando la excepción normalmente.
Nota:
Las excepciones solo se pueden interceptar en código administrado, es decir, cuando el programa que se está depurando se ejecuta en el tiempo de ejecución de .NET. Por supuesto, los implementadores de lenguaje de terceros pueden implementar InterceptStackException
en sus propios motores de depuración si así lo eligen.
Una vez completada la interceptación, se señala un IDebugInterceptExceptionCompleteEvent2 .