次の方法で共有


IDebugStackFrame3

このインターフェイスによって 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

関連項目