次の方法で共有


ICorDebugManagedCallback2::MDANotification メソッド

更新 : 2007 年 11 月

デバッグ対象のアプリケーションで、コード実行がマネージ デバッグ アシスタント (MDA: Managed Debugging Assistant) を検出したことを通知します。

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

パラメータ

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

    デバッガは、インターフェイスを問い合わせて判断することはできますが、コントローラがプロセスかアプリケーション ドメインかを推測することはできません。

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

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

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

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

解説

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

共通言語ランタイム (CLR: Common Language Runtime) は、発生した MDA、および任意の時点で特定の MDA にあるデータを確認できます。したがって、デバッガは特定の MDA パターンを必要とする機能を組み込む必要はありません。

MDA は、MDA が検出された直後にキューに配置され発生する可能性があります。これは、ランタイムが MDA を検出したときに MDA を発生させるのではなく、ランタイムが MDA を発生させるためのセーフ ポイントに達するまで待機する必要がある場合に発生する可能性があります。また、ランタイムは、キューに入っているコールバックの単一のセットで多数の MDA を発生させる可能性もあります ("attach" イベント操作と同様)。

CLR が MDA で使用するメモリをリサイクルできるように、デバッガは MDANotification コールバックから制御が戻った後すぐに、ICorDebugMDA インスタンスへの参照を解放する必要があります。多数の MDA が発生している場合、インスタンスを解放すると、パフォーマンスが向上する可能性があります。

必要条件

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

ヘッダー : CorDebug.idl

ライブラリ : CorGuids.lib

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

参照

概念

マネージ デバッグ アシスタントによるエラーの診断

参照

ICorDebugManagedCallback2

ICorDebugManagedCallback