デバッグ対象のアプリケーションで、コード実行がマネージ デバッグ アシスタント (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、CorDebug.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0
参照
参照
ICorDebugManagedCallback2 インターフェイス
ICorDebugManagedCallback インターフェイス