次に、例外がスローされた場合に発生するプロセスについて説明します。
例外処理プロセス
例外が最初にスローされたとき、ただし、デバッグ中のプログラムの例外ハンドラーによって処理される前に、デバッグ エンジン (DE) によって、IDebugExceptionEvent2 が停止イベントとして、セッション デバッグ マネージャー (SDM) に送信されます。
IDebugExceptionEvent2
は、例外の設定 (デバッグ パッケージの [例外] ダイアログボックスで指定された) で、ユーザーが初回例外通知で停止するように指定した場合にのみ送信されます。SDM によって、IDebugExceptionEvent2::GetException が呼び出され、例外のプロパティが取得されます。
デバッグ パッケージによって、IDebugExceptionEvent2::CanPassToDebuggee が呼び出され、ユーザーに提示するオプションが決定されます。
デバッグ パッケージによって、初回例外ダイアログ ボックスが開かれ、例外を処理する方法がユーザーに尋ねられます。
ユーザーが続行するように選択した場合、SDM によって、IDebugExceptionEvent2::CanPassToDebuggee が呼び出されます。
メソッドで S_OK が返された場合、IDebugExceptionEvent2::PassToDebuggee が呼び出されます。
または
メソッドで S_FALSE が返された場合、デバッグ中のプログラムには、例外を処理するための二度目の機会が与えられます。
デバッグ中のプログラムに二度目の機会の例外用のハンドラーがない場合、DE によって
IDebugExceptionEvent2
が EVENT_SYNC_STOP として SDM に送信されます。デバッグ パッケージによって、初回例外ダイアログ ボックスが開かれ、例外を処理する方法がユーザーに尋ねられます。
デバッグ パッケージによって、IDebugExceptionEvent2::CanPassToDebuggee が呼び出され、ユーザーに提示するオプションが決定されます。
デバッグ パッケージによって、二度目の機会の例外ダイアログ ボックスが開かれ、例外を処理する方法がユーザーに尋ねられます。
メソッドで S_OK が返された場合、
IDebugExceptionEvent2::PassToDebuggee
が呼び出されます。