次の方法で共有


IDebugStackFrame3::InterceptCurrentException

現在のスタック フレームで現在の例外をインターセプトするときに、デバッガーによって呼び出されます。

構文

int InterceptCurrentException(
   uint dwFlags,
   out  ulong pqwCookie
);

パラメーター

dwFlags
[入力] さまざまなアクションを指定します。 現時点では、INTERCEPT_EXCEPTION_ACTION の値 IEA_INTERCEPT のみがサポートされているため、これを指定する必要があります。

pqwCookie
[出力] 特定の例外を識別する一意の値。

戻り値

成功した場合は、S_OK を返します。それ以外の場合はエラー コードを返します。

最も一般的なエラー通知は次のとおりです。

エラー 説明
E_EXCEPTION_CANNOT_BE_INTERCEPTED 現在の例外をインターセプトできません。
E_EXCEPTION_CANNOT_UNWIND_ABOVE_CALLBACK 現在の実行フレームでハンドラーがまだ検索されていません。
E_INTERCEPT_CURRENT_EXCEPTION_NOT_SUPPORTED このフレームでは、このメソッドはサポートされていません。

解説

デバッガーでは、例外がスローされると、例外処理プロセス中の主要なポイントでランタイムから制御を取得します。 デバッガーでは、これらの主要な瞬間に、現在のスタック フレームで例外をインターセプトする必要があるかどうかを確認できます。 このように、インターセプトされた例外は、スタック フレームに例外ハンドラー (プログラム コードの try/catch ブロックなど) がない場合でも、実質的にスタック フレームの実行時の例外ハンドラーになります。

デバッガーでは、例外をインターセプトする必要があるかどうかを確認したい場合に、現在のスタック フレーム オブジェクトでこのメソッドを呼び出します。 このメソッドでは、例外のすべての詳細を処理します。 IDebugStackFrame3 インターフェイスが実装されていない場合、または InterceptStackException メソッドによってエラーが返された場合、デバッガーでは通常どおりに例外の処理を続行します。

Note

例外は、マネージド コード内で (つまり、デバッグ中のプログラムが .NET ランタイムで実行されている場合に) のみインターセプトできます。 もちろん、サードパーティ言語の実装者は独自のデバッグ エンジンに InterceptStackException を実装できます (そのような選択をした場合)。

インターセプトが完了すると、IDebugInterceptExceptionCompleteEvent2 が通知されます。

関連項目