ICorDebugUnmanagedCallback::DebugEvent メソッド

ネイティブ イベントが発生したことをデバッガーに通知します。

HRESULT DebugEvent (
    [in] LPDEBUG_EVENT  pDebugEvent,
    [in] BOOL           fOutOfBand
);

パラメーター

  • pDebugEvent
    [入力] ネイティブ イベントへのポインター。

  • fOutOfBand
    [入力] アンマネージ イベントが発生したときに、デバッガーで ICorDebugController::Continue を呼び出すまでマネージ プロセス状態を操作できないようにする場合は true。それ以外の場合は false。

解説

デバッグするスレッドが Win32 スレッドの場合は、Win32 デバッグ インターフェイスのいずれのメンバーも使用しません。 Win32 スレッドでは、帯域外イベントを越えてデバッグを続行する場合にのみ ICorDebugController::Continue だけを呼び出すことができます。

DebugEvent コールバックは、コールバックの標準規則に従いません。 DebugEvent を呼び出すと、プロセスは未処理の OS デバッグ停止状態になります。 プロセスは同期されません。 マネージ コードに関する情報の要求を満たす必要があるときに、自動的に同期状態になります。その結果、他のネストされた DebugEvent がコールバックされることがあります。

プロセスで ICorDebugProcess::ClearCurrentException を呼び出して例外イベントを無視してから、プロセスを続行します。 このメソッドを呼び出すと、DBG_EXCEPTION_NOT_HANDLED の代わりに DBG_CONTINUE を後続の要求に送信し、帯域外ブレークポイントとシングル ステップ例外を自動的にクリアします。 帯域外イベントは、デバッグするアプリケーションが停止しているように見えるときや、未解決の帯域内イベントが既に存在する場合でも発生する可能性があります。

.NET Framework Version 2.0 では、デバッガーは帯域外ブレークポイント イベントを越えて即座に続行する必要があります。 デバッガーは、ICorDebugProcess2::SetUnmanagedBreakpoint メソッドと ICorDebugProcess2::ClearUnmanagedBreakpoint メソッドを使用して、ブレークポイントを追加および削除する必要があります。 これらのメソッドで、すべての帯域外ブレークポイントが自動的にスキップされます。 このため、Win32 DebugBreak 関数への呼び出しなど、命令ストリーム内に既にあるディスパッチされた帯域外ブレークポイントのみが未処理のブレークポイントになります。 ICorDebugProcess::ClearCurrentExceptionICorDebugProcess::GetThreadContextICorDebugProcess::SetThreadContext、またはデバッグ API の他のメンバーは使用しないでください。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

ヘッダー: CorDebug.idl、CorDebug.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0、1.1、1.0

参照

参照

ICorDebugUnmanagedCallback インターフェイス