プログラムを起動する
プログラムをデバッグするユーザーは、F5 キーを押して、IDE からデバッガーを実行することができます。 これにより、最終的に IDE がデバッグ エンジン (DE) に接続され、その後で次のようにプログラムに接続 (アタッチ) されるという、一連のイベントが開始されます。
IDE は、最初にプロジェクト パッケージを呼び出して、ソリューションのアクティブなプロジェクトのデバッグ設定を取得します。 この設定には、開始ディレクトリ、環境変数、プログラムが実行されるポート、およびプログラムの作成に使用する DE (指定されている場合) が含まれます。 これらの設定は、デバッグ パッケージに渡されます。
DE が指定されている場合、DE はオペレーティング システムを呼び出してプログラムを起動します。 プログラムを起動した結果として、プログラムのランタイム環境が読み込まれます。 たとえば、プログラムが MSIL で記述されている場合、プログラムを実行するために共通言語ランタイムが呼び出されます。
または
DE が指定されていない場合は、ポートがオペレーティング システムを呼び出してプログラムを起動し、これによりプログラムのランタイム環境が読み込まれます。
Note
DE を使用してプログラムを起動する場合は、同じ DE がプログラムにアタッチされる可能性があります。
DE またはポートのどちらがプログラムを起動したかに応じて、DE またはランタイム環境によってプログラムの説明 (ノード) が作成され、プログラムが実行されていることがポートに通知されます。
Note
プログラム ノードはデバッグ可能なプログラムの簡易表現であるため、ランタイム環境でプログラム ノードを作成することをお勧めします。 プログラム ノードを作成および登録するためだけに、DE 全体を読み込む必要はありません。 DE が IDE のプロセスで実行されるように設計されていても、実際には IDE が実行されていない場合は、プログラム ノードをポートに追加できるコンポーネントが必要です。
新しく作成されたプログラムは、同じ IDE から起動またはアタッチされた、関連する、または関連しない他のプログラムと共に、デバッグ セッションを作成します。
プログラムによって、ユーザーが最初に F5 キーを押したときに、Visual Studio のデバッグ パッケージが DebugLaunch メソッドを介してプロジェクト パッケージ (起動中のプログラムの種類に関連付けられているもの) を呼び出します。その後、ソリューションのアクティブなプロジェクト デバッグ設定を含む VsDebugTargetInfo2 構造体を入力します。 この構造体は、LaunchDebugTargets2 メソッドの呼び出しによってデバッグ パッケージに戻されます。 その後、デバッグ パッケージは、セッション デバッグ マネージャー (SDM) をインスタンス化します。これにより、デバッグ中のプログラムと、関連付けられているデバッグ エンジンが起動します。
SDM に渡される引数の 1 つに、プログラムを起動するために使用される DE の GUID があります。
DE の GUID が
GUID_NULL
でない場合、SDM は DE を共同作成してから、その LaunchSuspended メソッドを呼び出してプログラムを起動します。 たとえば、プログラムがネイティブ コードで記述されている場合、IDebugEngineLaunch2::LaunchSuspended
はプログラムを実行するためにCreateProcess
とResumeThread
(Win32 関数) を呼び出す場合があります。プログラムを起動した結果として、プログラムのランタイム環境が読み込まれます。 その後、DE またはランタイム環境は、プログラムを記述するために IDebugProgramNode2 インターフェイスを作成し、このインターフェイスを AddProgramNode に渡して、プログラムが実行されていることをポートに通知します。
GUID_NULL
が渡されると、ポートはプログラムを起動します。 プログラムが実行されると、ランタイム環境により、プログラムを記述してIDebugPortNotify2::AddProgramNode
に渡すIDebugProgramNode2
インターフェイスが作成されます。 これにより、プログラムが実行されていることがポートに通知されます。 その後、SDM は、実行中のプログラムにデバッグ エンジンをアタッチします。
このセクションの内容
「ポートに通知する」では、プログラムが起動し、ポートに通知された後の動作について説明します。
「起動後のアタッチ」では、デバッグ セッションがいつプログラムに DE をアタッチする準備ができるかについて説明します。
関連するコンテンツ
- 「デバッグ タスク」には、プログラムの起動や式の評価などの、さまざまなデバッグ タスクへのリンクが含まれています。