複数のプロセスをデバッグする (C#、Visual Basic、C++)

Visual Studio では、複数のプロセスが含まれるソリューションをデバッグできます。 プロセスの開始と切り替え、中断、続行、ソースのステップ実行、デバッグの停止、個々のプロセスの終了やプロセスからのデタッチを行うことができます。

複数のプロセスのデバッグを開始する

Visual Studio ソリューション内の複数のプロジェクトを個別に実行できる場合は、デバッガーを起動するプロジェクトを選択できます。 ソリューション エクスプローラーでは、現在のスタートアップ プロジェクトが太字で表示されます。

スタートアップ プロジェクトを変更するには、ソリューション エクスプローラーで別のプロジェクトを右クリックして、[スタートアップ プロジェクトに設定] を選択します。

プロジェクトをスタートアップ プロジェクトにしないでソリューション エクスプローラーからプロジェクトのデバッグを始めるには、プロジェクトを右クリックし、[デバッグ]>[新しいインスタンスを開始] または[新しいインスタンスにステップ イン] を選択します。

ソリューションのプロパティから 1 つまたは複数のスタートアップ プロジェクトを設定するには:

  1. ソリューション エクスプローラーでソリューションを選択してから、ツール バーの [プロパティ] アイコンを選択するか、ソリューションを右クリックして [プロパティ] を選択します。

  2. [プロパティ] ページで、[共通プロパティ]>[スタートアップ プロジェクト] を選択します。

    Changing the startup type for a project

  3. [現在の選択][シングル スタートアップ プロジェクト] とプロジェクト ファイル、または [マルチ スタートアップ プロジェクト] を選択します。

    [マルチ スタートアップ プロジェクト] を選択した場合は、各プロジェクトの起動順序を変更し、実行するアクションを次のいずれかに変更できます: [開始][デバッグなしで開始][なし]

  4. [適用] を選択するか、または [OK] を選択し適用してダイアログを閉じます。

プロセスへのアタッチ

リモート デバイスなど、Visual Studio の外部のプロセスで実行されているアプリに、デバッガーを "アタッチ" することもできます。 アプリにアタッチした後は、Visual Studio のデバッガーを使用できます。 デバッグ機能は制限される可能性があります。 それは、アプリがデバッグ情報付きでビルドされたかどうか、アプリのソース コードにアクセスできるかどうか、および JIT コンパイラによってデバッグ情報が追跡されているかどうかによって異なります。

詳細については、実行中のプロセスへのアタッチに関するページを参照してください。

実行中のプロセスにアタッチするには:

  1. アプリが実行されている状態で、[デバッグ]>[プロセスにアタッチ] を選択します。

    Attach to Process dialog box

  2. [プロセスにアタッチ] ダイアログ ボックスで、[選択可能なプロセス] の一覧からプロセスを選択して、[アタッチ] を選択します。

Note

デバッガーは、子プロジェクトが同じソリューション内にある場合でも、デバッグ対象のプロセスによって開始された子プロセスに自動的にアタッチされません。 子プロセスをデバッグするには、開始後に子プロセスにアタッチするか、新しいデバッガー インスタンスで子プロセスを開始するように Windows レジストリ エディターを構成します。

レジストリ エディターを使用してデバッガーでプロセスを自動的に開始する

場合によっては、別のプロセスで起動されたアプリのスタートアップ コードをデバッグする必要があります。 たとえば、サービスやカスタムのセットアップ動作などです。 デバッガーを起動してアプリに自動的にアタッチすることができます。

  1. regedit.exe を実行して Windows レジストリ エディターを開始します。

  2. レジストリ エディターで、HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options に移動します。

  3. デバッガーで起動するアプリのフォルダーを選択します。

    アプリが子フォルダーとして一覧に表示されない場合は、Image File Execution Options を右クリックし、[新規]>[キー] を選択して、アプリ名を入力します。 または、ツリーで新しいキーを右クリックし、[名前の変更] を選択して、アプリ名を入力 ます。

  4. ツリーで新しいキーを右クリックし、[新規]>[文字列値] を選択します。

  5. 新しい値の名前を「新しい値 #1」から「debugger」に変更します。

  6. debugger を右クリックして、[修正] を選択します。

    Edit String dialog box

  7. [文字列の編集] ダイアログ ボックスで、[値のデータ] ボックスに「vsjitdebugger.exe」と入力し、[OK] を選択します。

    Automatic debugger start entry in regedit.exe

複数のプロセスでデバッグする

複数のプロセスで構成されるアプリをデバッグすると、中断、ステップ実行、続行のデバッガー コマンドは、既定ですべてのプロセスに適用されます。 たとえば、あるプロセスがブレークポイントで中断されると、他のすべてのプロセスの実行も中断されます。 コマンドの実行対象をより詳細に制御するために、この既定の動作を変更できます。

1 つのプロセスが中断したときにすべてのプロセスを中断するかどうかを変更するには:

  • [ツール] (または [デバッグ]) >[オプション]>[デバッグ]>[全般] で、[1 つのプロセスが中断したときには、他のプロセスも中断する] チェック ボックスをオンまたはオフにします。

Break コマンド、step コマンド、および continue コマンド

次の表では、[1 つのプロセスが中断したときには、他のプロセスも中断する] チェック ボックスがオンまたはオフのときの、デバッグ コマンドの動作について説明します。

コマンド オン 選択を解除
[デバッグ]>[すべて中断] すべてのプロセスが中断されます。 すべてのプロセスが中断されます。
[デバッグ]>[続行] すべてのプロセスが再開されます。 一時停止中のすべてプロセスが再開されます。
[デバッグ]>[ステップ イン][ステップ オーバー][ステップ アウト] 現在のプロセスのステップ実行中にすべてのプロセスが実行されます。
その後、すべてのプロセスが中断されます。
現在のプロセスがステップ実行されます。
一時停止中のプロセスが再開されます。
実行中のプロセスが続行されます。
[デバッグ]>[現在のプロセスにステップ インする][現在のプロセスにステップ オーバーする][現在のプロセスにステップ アウトする] 該当なし 現在のプロセスがステップ実行されます。
他のプロセスの既存の状態 (一時停止中または実行中) が維持されます。
ソース ウィンドウの [ブレークポイント] すべてのプロセスが中断されます。 ソース ウィンドウのプロセスのみ中断されます。
ソース ウィンドウの [カーソル行の前まで実行]
ソース ウィンドウのプロセスは現在のプロセスであることが必要です。
ソース ウィンドウのプロセスがカーソル位置まで実行されてから中断されている間に、すべてのプロセスが実行されます。
その後、他のすべてのプロセスが中断されます。
ソース ウィンドウのプロセスはカーソル位置まで実行されます。
他のプロセスの既存の状態 (一時停止中または実行中) が維持されます。
[プロセス] ウィンドウ >[プロセスのブレーク] 該当なし 選択したプロセスが中断されます。
他のプロセスの既存の状態 (一時停止中または実行中) が維持されます。
[プロセス] ウィンドウ >[プロセスの続行] 該当なし 選択したプロセスが再開されます。
他のプロセスの既存の状態 (一時停止中または実行中) が維持されます。

ソースとシンボル (.pdb) ファイルを検索する

プロセスのソース コード内を移動するには、デバッガーでソース ファイルとシンボル ファイルにアクセスする必要があります。 詳細については、シンボル (.pdb) ファイルとソース ファイルの指定に関する記事をご覧ください。

プロセスのファイルにアクセスできない場合は、[逆アセンブル] ウィンドウを使用して移動できます。 詳細については、「方法:[逆アセンブル] ウィンドウを使用する」を参照してください。

プロセスを切り替える

デバッグ中には複数のプロセスにアタッチできますが、デバッガーでアクティブになっているプロセスは常に 1 つだけです。 [デバッグの場所] ツール バーまたは [プロセス] ウィンドウでアクティブまたは現在のプロセスを設定できます。 プロセス間で切り替えるには、両方のプロセスが中断モードであることが必要です。

[デバッグの場所] ツール バーから現在のプロセスを設定するには:

  1. [デバッグの場所] ツール バーを開くには、[表示]>[ツール バー]>[デバッグの場所] を選択します。

  2. デバッグ中に、[デバッグの場所] ツール バーで、[プロセス] ドロップダウンから現在のプロセスとして設定するプロセスを選択します。

    Switch between processes

[プロセス] ウィンドウで現在のプロセスを設定するには:

  1. [プロセス] ウィンドウを開くには、デバッグ中に、[デバッグ]>[Windows]>[プロセス] を選択します。

  2. [プロセス] ウィンドウでは、現在のプロセスが黄色の矢印でマークされます。 現在のプロセスとして設定するプロセスをダブルクリックします。

    Processes window

あるプロセスに切り替えると、それがデバッグ対象の現在のプロセスとして設定されます。 デバッガーのウィンドウに現在のプロセスの状態が表示され、すべてのステップ実行コマンドは現在のプロセスにのみ影響を与えます。

複数のプロセスのデバッグを停止する

既定では、[デバッグ]>[デバッグの停止] を選択すると、デバッガーが終了するか、またはすべてのプロセスからデタッチされます。

  • 現在のプロセスがデバッガーで開始された場合、そのプロセスは終了されます。

  • デバッガーを現在のプロセスにアタッチした場合、デバッガーはプロセスからデタッチされ、プロセスは実行中のままになります。

Visual Studio ソリューションからプロセスのデバッグを開始した後は、既に実行されている別のプロセスにアタッチした後、[デバッグの停止] を選択すると、デバッグ セッションが終了します。 Visual Studio で開始されたプロセスは終了しますが、アタッチしたプロセスは引き続き実行されています。

[デバッグの停止] によって個々のプロセスがどのような影響をうけるかを制御するには、[プロセス] ウィンドウでプロセスを右クリックし、[デバッグの停止時にデタッチ] チェック ボックスをオンまたはオフにします。

Note

[1 つのプロセスが中断したときには、他のプロセスも中断する] デバッガー オプションは、停止、終了、プロセスからのデタッチには影響を与えません。

停止、終了、デタッチのコマンド

次の表では、複数のプロセスでのデバッガーの停止、終了、デタッチ コマンドの動作について説明します。

コマンド 説明
[デバッグ]>[デバッグの停止] [プロセス] ウィンドウで動作が変更されていない限り、デバッガーによって開始されたプロセスは終了され、アタッチされたプロセスはデタッチされます。
[デバッグ]>[すべて中止] すべてのプロセスが終了されます。
[デバッグ]>[すべてデタッチ] すべてのプロセスからデバッガーがデタッチされます。
[プロセス] ウィンドウ >[プロセスのデタッチ] 選択したプロセスからデバッガーがデタッチされます。
他のプロセスの既存の状態 (一時停止中または実行中) が維持されます。
[プロセス] ウィンドウ >[プロセスの終了] 選択したプロセスが終了されます。
他のプロセスの既存の状態 (一時停止中または実行中) が維持されます。
[プロセス] ウィンドウ >[Detach when debugging stops]\(デバッグが停止したらデタッチする\) オンになっている場合は、[デバッグ]>[デバッグの停止] を選択すると、選択されているプロセスからデタッチします。
オフになっている場合、[デバッグ]>[デバッグの停止] を選択すると、選択されているプロセスが終了します。