ICorDebugManagedCallback2::MDANotification メソッド

コード実行によって、デバッグ中のアプリケーションでマネージド デバッグ アシスタント (MDA) が検出されたことを通知します。

構文

HRESULT MDANotification(  
    [in] ICorDebugController  *pController,  
    [in] ICorDebugThread      *pThread,  
    [in] ICorDebugMDA         *pMDA  
);  

パラメーター

pController
[in] MDA が発生したプロセスまたはアプリケーション ドメインを公開する ICorDebugController インターフェイスへのポインター。

デバッガーでは、コントローラーがプロセスであるか、アプリケーション ドメインであるかを想定していませんが、常にインターフェイスに照会して判断することができます。

pThread
[in] デバッグ イベントが発生したマネージド スレッドを公開する ICorDebugThread インターフェイスへのポインター。

アンマネージド スレッドで MDA が発生した場合、pThread の値は null になります。

MDA オブジェクト自体からオペレーティング システム (OS) のスレッド ID を取得する必要があります。

pMDA
[in] MDA 情報を公開する ICorDebugMDA インターフェイスへのポインター。

解説

MDA はヒューリスティック警告であり、ICorDebugController::Continue を呼び出してデバッグ中のアプリケーションの実行を再開する場合を除き、明示的なデバッガー アクションは必要ありません。

共通言語ランタイム (CLR) では、どの MDA が起動され、任意の時点でどのデータが特定の MDA に存在するかを判断できます。 したがって、デバッガーでは、特定の MDA パターンを必要とする機能は構築できません。

MDA は、MDA の検出後すぐにキューに入れられ、起動されることがあります。 これは、ランタイムが検出時に MDA を起動するのではなく、MDA を起動するセーフ ポイントに到達するまで待機する必要がある場合に発生する可能性があります。 このことはまた、ランタイムが、キューに入れられたコールバックの単一セット内で多数の MDA を起動できることも意味します ("attach" イベント操作に似ています)。

デバッガーでは、MDANotification コールバックから戻った直後に ICorDebugMDA インスタンスへの参照を解放し、MDA によって消費されるメモリを CLR で再利用できるようにする必要があります。 多くの MDA が起動している場合、インスタンスを解放するとパフォーマンスが向上する可能性があります。

必要条件

:システム要件」を参照してください。

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

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 2.0 以降で使用可能

関連項目