次の方法で共有


.NET Framework 2.0 でのデバッグ API の変更点

更新 : 2007 年 11 月

ここでは、共通言語ランタイム (CLR: Common Language Runtime) のデバッグ API を使用するときに考慮する必要のある、.NET Framework Version 2.0 での変更点について説明します。

API の変更点

  • CorDebug はコクラスではなくなりました。共同作成する代わりに、ホスト API の CreateDebuggingInterfaceFromVersion グローバル静的関数を使用します。デバッガのバージョンは、CorDebug.idl の CorDebugInterfaceVersion 列挙型で定義されている定数の 1 つでなければなりません。デバッガが .NET Framework 2.0 をサポートする場合は、CorDebugVersion_2_0 定数を使用します。実行中のプロセスのデバッグ対象のバージョンを取得するには、ホスト API の GetVersionFromProcess グローバル静的関数を使用します。または、ホスト API の GetRequestedRuntimeVersion グローバル静的関数を使用して、ディスク上の特定の .exe ファイルに対して読み込まれるバージョンの最善の予測を取得したり、ランタイムのバージョンをユーザーに選択させたりすることもできます。ユーザーが指定した文字列が有効なバージョンかどうかを判定するには、ホスト API の GetRequestedRuntimeInfo グローバル静的関数を使用します。これらの関数はすべて、MSCorEE.idl で定義されています。

  • .NET Framework 2.0 対応のデバッガとして認識されるためには、デバッガは ICorDebugManagedCallback2 インターフェイスを実装する必要があります。

  • .NET Framework 2.0 での ICorDebugEnum の戻り値は、COM に準拠しています。

  • ランタイムがなんらかのタスクを実行するために特殊なフレームを挿入した位置のスタック トレースには、新しい ICorDebugInternalFrame オブジェクトが表示される場合があります。これらのフレームは、ICorDebugNativeFrame インターフェイスまたは ICorDebugILFrame インターフェイスに対する QueryInterface クエリには応答しません。

  • ICorDebugController::Stop メソッドに対するタイムアウトは無視されます。

  • ICorDebugModule::EnableJITDebugging メソッドは、モジュールが最初に読み込まれるときにのみ使用できます。アタッチ操作の一部として発行される ModuleLoad コールバックの中でこのメソッドを使用すると、失敗します。この制限により、すべての関数についてモジュールのコードの一貫性が保証されます。

  • 特定の関数に対する .NET Framework のネイティブ コードは、メモリ内で単一の連続したブロックになっていない場合があります。そのため、デバッガでは、ICorDebugCode インターフェイスの GetAddress メソッド、GetSize メソッド、および GetCode メソッドを使用しないでください。代わりに、ICorDebugCode2::GetCodeChunks および ICorDebugProcess::ReadMemory を使用する必要があります。

  • 混合モードのデバッガは、新しい ICorDebugProcess2::SetUnmanagedBreakpoint メソッドを使用して、アンマネージ ブレークポイントを設定する必要があります。

  • ネイティブ スレッド終了デバッグ イベントは、.NET Framework 2.0 では帯域外です。

  • デバッグ API のオブジェクトは、より強硬に無効化されます。.NET Framework 1.0 または 1.1 で成功した操作が .NET Framework 2.0 で CORDBG_E_OBJECT_NEUTERED を返す場合は、操作を実行したインターフェイスの有効期限が切れており、インターフェイスを取得し直す必要があります。.NET Framework 1.0 および 1.1 で操作から取得されていた値は、正しくない可能性があります。

ジェネリック

.NET Framework 2.0 でのジェネリックの導入により、以前のバージョンでのデバッガに関する多くの前提が成立しなくなっています。デバッガは、以下に示すジェネリック対応の形式の ICorDebug 関数を使用するように、変更する必要があります。

参照

その他の技術情報

.NET Framework でのデバッグ

CLR デバッグの概要

デバッグ (アンマネージ API リファレンス)