IDebugStackFrame3::InterceptCurrentException

Lo llama el depurador en el marco de pila actual cuando quiere interceptar la excepción actual.

Sintaxis

int InterceptCurrentException(
   uint dwFlags,
   out  ulong pqwCookie
);

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 .

Consulte también