共通言語ランタイム (CLR: Common Language Runtime) デバッグ API は、ランタイム環境でのデバッグをサポートします。 以下では、ランタイム プロセスをデバッグする方法について、順をおって説明します。
デバッガーが ICorDebug インターフェイスのインスタンスを作成します。 CLSID CLSID_CorDebug を使用して CComPtrBase::CoCreateInstance を呼び出し、ICorDebug のインスタンスを取得します。
デバッガーが ICorDebug::Initialize メソッドを呼び出してデバッグ API を初期化します。
デバッガーがマネージ イベント ハンドラーを登録します。 ICorDebug::SetManagedHandler メソッドを呼び出すことにより、ICorDebugManagedCallback インターフェイスのインスタンスをコールバックとして登録し、マネージ コード内のイベントに関する通知と情報を受け取るようにします。
必要に応じて、デバッガーがアンマネージ イベント ハンドラーを登録します。 アンマネージ コードをデバッグする場合は、ICorDebug::SetUnmanagedHandler メソッドを呼び出して ICorDebugUnmanagedCallback のインスタンスをコールバックとして登録し、アンマネージ コード内のイベントに関する通知と情報を受け取るようにします。
デバッガーがデバッガー プロセスを作成します。 ICorDebug::CreateProcess メソッドを呼び出してプロセスを作成します。
デバッグ API が新しいデバッガー プロセスについてデバッガーに通知します。 デバッグ API が ICorDebugManagedCallback のメソッドを呼び出します (最初は ICorDebugManagedCallback::CreateProcess)。 この後、ICorDebugManagedCallback::LoadModule、ICorDebugManagedCallback::LoadClass、ICorDebugManagedCallback::CreateThread などが呼び出される場合があります。
デバッガーがデバッグを停止します。 いずれかの時点で、デバッガーが ICorDebugManagedCallback::ExitProcess イベントを取得します。このイベントは、デバッグ対象がもう実行されていないことを示します。 その後のいずれかの時点で、デバッガーは、保持しているインターフェイスへの参照をすべて解放し、次に ICorDebug::Terminate メソッドを呼び出します。