This interface extends IDebugStackFrame2 to handle intercepted exceptions.
The debug engine (DE) implements this interface on the same object that implements the IDebugStackFrame2 interface to support intercepted exceptions.
In addition to the methods inherited from IDebugStackFrame2, IDebugStackFrame3 exposes the following methods.
An intercepted exception means that a debugger can process an exception before any normal exception handling routines are called by the run time. Intercepting an exception essentially means making the run time pretend that there is an exception handler present even when there is not.
IDebugStackFrame3::InterceptCurrentException is called during all normal exception callback events (the only exception to this is if you are debugging mixed-mode code (managed and unmanaged code), in which case the exception cannot be intercepted during the last-chance callback). If the DE does not implement IDebugStackFrame3, or the DE returns an error from IDebugStackFrame3::InterceptCurrentException (such as E_NOTIMPL), then the debugger will handle the exception normally.
By intercepting an exception, the debugger can allow the user to make changes to the state of the program being debugged and then resume execution at the point where the exception was thrown.
Intercepted exceptions are allowed only in managed code, that is, in a program that is running under the Common Language Runtime (CLR).
A debug engine indicates that it supports intercepting exceptions by setting "metricExceptions" to a value of 1 at run time by using the SetMetric function. For more information, see SDK Helpers for Debugging.