プログラムを適切なポートに登録した後で、デバッグ対象のプログラムにデバッガーをアタッチする必要があります。
アタッチ方法を選択する
セッション デバッグ マネージャー (SDM) がデバッグ対象のプログラムへのアタッチを試行する方法は 3 つあります。
LaunchSuspended メソッドを使用してデバッグ エンジンによって起動されるプログラムの場合 (典型的なインタープリター言語など)、SDM は、アタッチ対象のプログラムに関連付けられている IDebugProgramNode2 オブジェクトから IDebugProgramNodeAttach2 インターフェイスを取得します。 SDM が
IDebugProgramNodeAttach2
インターフェイスを取得できる場合、SDM は次に OnAttach メソッドを呼び出します。IDebugProgramNodeAttach2::OnAttach
メソッドはS_OK
を返して、プログラムにアタッチしなかったことと、プログラムにアタッチするために他の方法を試行できることを示します。SDM がアタッチ対象のプログラムから IDebugProgramEx2 インターフェイスを取得できる場合、SDM は Attach メソッドを呼び出します。 この方法は、ポート サプライヤーによってリモートで起動されたプログラムの場合に一般的です。
IDebugProgramNodeAttach2::OnAttach
またはIDebugProgramEx2::Attach
メソッドを使用してプログラムにアタッチできない場合、SDM はCoCreateInstance
関数を呼び出してデバッグ エンジンを読み込み (まだ読み込まれていない場合)、その後、Attach メソッドを呼び出します。 この方法は、ポート サプライヤーによってローカルに起動されたプログラムの場合に一般的です。また、カスタム ポート サプライヤーが、カスタム ポート サプライヤーの
IDebugProgramEx2::Attach
メソッドの実装において、IDebugEngine2::Attach
メソッドを呼び出すこともできます。 このケースでは通常、カスタム ポート サプライヤーは、リモート マシン上でデバッグ エンジンを起動します。アタッチが実行されるのは、セッション デバッグ マネージャー (SDM) が Attach メソッドを呼び出すときです。
デバッグ対象のアプリケーションと同じプロセスで DE を実行する場合は、IDebugProgramNode2 の次のメソッドを実装する必要があります。
-
IDebugEngine2::Attach
メソッドが呼び出されたら、IDebugEngine2::Attach
メソッドの実装で次の手順を実行します。
IDebugEngineCreateEvent2 イベント オブジェクトを SDM に送信します。 詳細については、「イベントの送信」を参照してください。
IDebugEngine2::Attach
メソッドに渡された IDebugProgram2 オブジェクトに対して、GetProgramId メソッドを呼び出します。これによって、プログラムの識別に使用される
GUID
が返されます。GUID
は、DE に対してローカル プログラムを表すオブジェクトに格納される必要があります。また、IDebugProgram2::GetProgramId
メソッドがIDebugProgram2
インターフェイスで呼び出されたときに返される必要があります。Note
IDebugProgramNodeAttach2
インターフェイスを実装すると、プログラムのGUID
がIDebugProgramNodeAttach2::OnAttach
メソッドに渡されます。 このGUID
は、IDebugProgram2::GetProgramId
メソッドから返されるプログラムのGUID
で使用されます。IDebugProgramCreateEvent2 イベント オブジェクトを送信して、DE に対してプログラムを表すローカルの
IDebugProgram2
オブジェクトが作成されたことを SDM に通知します。 詳細については、「イベントの送信」を参照してください。Note
これは、
IDebugEngine2::Attach
メソッドに渡されたのと同じIDebugProgram2
オブジェクトではありません。 以前渡されたIDebugProgram2
オブジェクトはポートでのみ認識される別のオブジェクトです。