このインターフェイスによって IDebugStackFrame2 が拡張され、インターセプトされた例外が処理されます。
構文
IDebugStackFrame3 : IDebugStackFrame2
実装側の注意
デバッグ エンジン (DE) では、インターセプトされた例外をサポートするために、IDebugStackFrame2 インターフェイスを実装する同じオブジェクトにこのインターフェイスを実装します。
呼び出し元に関する注意事項
IDebugStackFrame2
インターフェイスを取得するには、このインターフェイスの QueryInterface を呼び出します。
Vtable 順序のメソッド
IDebugStackFrame3
では、IDebugStackFrame2 から継承されたメソッドに加えて以下のメソッドが公開されます。
メソッド | 説明 |
---|---|
InterceptCurrentException | 通常の例外処理の前に、現在のスタック フレームの例外を処理します。 |
GetUnwindCodeContext | スタック アンワインドが発生した場合に、コード コンテキストを返します。 |
解説
インターセプトされた例外は、通常の例外処理ルーチンがランタイムによって呼び出される前にデバッガーで例外を処理できることを意味します。 例外をインターセプトすると、実質的に、例外ハンドラーが存在しなくても存在するものとしてランタイムが動作します。
- InterceptCurrentException は、通常のすべての例外コールバック イベントの発生時に呼び出されます (唯一の例外は、混合モード コード (マネージドおよびアンマネージド コード) をデバッグする場合です。この場合、最後のコールバック時に例外をインターセプトできません)。 DE に
IDebugStackFrame3
が実装されていない場合、または DE で IDebugStackFrame3::InterceptCurrentException
のエラー (E_NOTIMPL
など) が返された場合、デバッガーでは通常どおりに例外を処理します。
デバッガーで例外をインターセプトすると、ユーザーがデバッグ中のプログラムの状態を変更してから、例外がスローされた時点から実行を再開できるようになります。
Note
インターセプトされた例外は、マネージド コード (つまり、共通言語ランタイム (CLR) で実行されているプログラム) でのみ使用できます。
デバッグ エンジンでは、実行時に SetMetric
関数を使用して "metricExceptions" の値を 1 に設定することで、例外のインターセプトをサポートしていることを示します。 詳細については、「デバッグ用の SDK ヘルパー」を参照してください。
要件
ヘッダー: msdbg.h
名前空間: Microsoft.VisualStudio.Debugger.Interop
アセンブリ: Microsoft.VisualStudio.Debugger.Interop.dll