デバッグ インターフェイスの一部のメソッドは、デバッグされるプロセス (つまり、デバッグ対象) を、実行前に一定の状態にする必要があります。 実行前の状態にするのは、CorDebug.idl ファイルに宣言されている、インターフェイスの直接的なメンバーのメソッドのみです (つまり、IUnknown から継承されないメソッドのみが対象になります)。
デバッグ対象の状態
デバッグ対象には、大まかに後続のセクションで説明する 6 つの状態があります。 これらの状態のうちの 3 つ (ライブ、同期、およびオペレーティング システム固定) だけが有効です。
ライブ
デバッグ対象が実行される、有効な状態です。 これは、デバッグ イベント間の状態です。
同期
デバッグ対象が停止するとすべてのマネージ状態が中断する、有効な状態です。 デバッグ対象は、次の 2 つの場合のいずれかでこの状態になります。
マネージ デバッグ イベントのディスパッチと継続の間の期間。 これは、マネージ (または、帯域内のネイティブ) デバッグ イベントがディスパッチされてからイベントが継続されるまでの期間です。
ICorDebugController::Stop メソッドの呼び出し後。
オペレーティング システム固定
帯域外のネイティブ デバッグ イベントでデバッグ対象が停止する、有効な状態です。 この状態は、相互運用機能デバッグに対してのみ有効です。
初期化前
デバッグ対象が初期化されていない、無効な状態です。 デバッグ対象を作成してから ICorDebugManagedCallback::CreateProcess コールバックをディスパッチするまでの期間がこの状態に該当します。 この状態のときに CorDebug.idl で定義したメソッドを呼び出すと、HRESULT 値として CORDBG_E_NOTREADY が返されることがあります。
停止または非アクティブ化
デバッグ対象をデバッグに利用できない、無効な状態です。 この状態のときに CorDebug.idl で定義したメソッドを呼び出すと、CORDBG_E_PROCESS_DETACHED、CORDBG_E_PROCESS_TERMINATED など、HRESULT 値のいずれか 1 つが返されることがあります。
回復不能なエラー
ICorDebugManagedCallback::DebuggerError コールバックがディスパッチされたときにデバッグ対象が入る、無効な状態です。 これは、マネージ デバッグ サービスが大きく破損して使用不能になったことを示します。 この状態のときに CorDebug.idl で定義したメソッドを呼び出すと、HRESULT 値として CORDBG_E_UNRECOVERBLE_ERROR が返されることがあります。
メソッドを呼び出す前に必要な状態
ICorDebug インターフェイスのメンバー メソッドはプロセス オブジェクト上では直接動作しないため、その宣言以外に状態固有の制限はありません。 他のすべてのインターフェイスのメンバー メソッドには、プロセス固有の関係があります。 そのため、これらのメソッドを呼び出すときは、デバッグ対象プロセスを、ライブ、同期、オペレーティング システム固定の 3 つの状態のいずれかにする必要があります。
デバッグ対象がライブ状態のときは、次のメソッドを呼び出すことができます。
デバッグ対象がオペレーティング システム固定状態または同期状態のいずれかのときは、次のメソッドを呼び出すことができます。
これ以外のメソッドはすべて、デバッガーが同期状態のときにのみ呼び出すことができます。 同期状態以外で呼び出すと、HRESULT 値として CORDBG_E_PROCESS_NOT_SYNCHRONIZED が返されることがあります。