次の方法で共有


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

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

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

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

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

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

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

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

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

    プロジェクト DBG_Execution_StartMultipleProjectsのスタートアップの種類を変更する

  3. [現在の選択]、[単一スタートアップ プロジェクトとプロジェクト ファイル]、または [複数のスタートアップ プロジェクト] を選択します。

    [複数のスタートアップ プロジェクト] を選択した場合は、各プロジェクトに対して実行するスタートアップの順序とアクションを変更できます。[開始]、[デバッグなしで開始]、または [なし] です。

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

プロセスに接続する

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

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

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

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

    プロセスにアタッチ ダイアログボックス

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

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

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

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

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

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

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

    アプリが子フォルダーとして一覧表示されていない場合は、[ Image File Execution Options]\(イメージ ファイル実行オプション\) を右クリックし、[ 新規>Key] を選択し、アプリ名を入力します。 または、ツリーで新しいキーを右クリックし、[ 名前の変更] を選択して、アプリ名を入力します。

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

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

  6. デバッガーを右クリックし、[変更] を選択します。

    文字列の編集ダイアログボックス

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

    regedit.exeの自動デバッガー開始エントリ

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

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

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

  1. [ツール] (または [デバッグ] >[オプション] ウィンドウで、[すべての設定]>[デバッグ>General]セクションを展開します。
  1. [ツール] (または [デバッグ] >[オプション] ダイアログボックスで、[デバッグ>General] セクションを展開します。
  1. [ 1 つのプロセスが中断されたときにすべてのプロセスを中断 する] オプション チェックボックスをオンまたはオフにします。

Break、Step、Continue コマンド

次の表では、 1 つのプロセス中断時にすべてのプロセスを中断 するチェック ボックスがオンまたは選択解除されている場合のデバッグ コマンドの動作について説明します。

命令 オン 選択解除
デバッグ>[すべて中断] すべてのプロセスが中断します。 すべてのプロセスが中断します。
デバッグ>続ける すべてのプロセスが再開されます。 中断されたすべてのプロセスが再開されます。
デバッグ>ステップ インステップ オーバー、または ステップ アウト すべてのプロセスは、現在のプロセス ステップ中に実行されます。
その後、すべてのプロセスが中断します。
現在の手順。
中断されたプロセスが再開されます。
実行中のプロセスは続行されます。
デバッグ>現在のプロセスへのステップ イン現在のプロセスのステップ オーバー、または 現在のプロセスのステップ アウト N/A 現在のプロセスステップ。
他のプロセスは、既存の状態 (中断または実行中) を維持します。
ソース ウィンドウ のブレークポイント すべてのプロセスが中断します。 ソース ウィンドウのプロセスのみが中断されます。
ソースウィンドウカーソルまで実行
ソース ウィンドウは、現在のプロセス内にある必要があります。
すべてのプロセスは、ソース ウィンドウ プロセスがカーソルに移動してから中断している間に実行されます。
その後、他のすべてのプロセスが中断します。
ソース ウィンドウ プロセスがカーソルまで続行します。
他のプロセスは、既存の状態 (中断または実行中) を維持します。
プロセス ウィンドウ >プロセスの中断 N/A 選択したプロセスが中断されます。
他のプロセスは、既存の状態 (中断または実行中) を維持します。
[プロセス]ウィンドウ>プロセスを続行 N/A 選択したプロセスが再開されます。
他のプロセスは、既存の状態 (中断または実行中) を維持します。

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

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

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

プロセスを切り替える

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

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

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

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

    プロセス間で切り替え (DBG_Execution_SwitchBetweenModules)

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

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

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

    プロセスウィンドウ

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

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

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

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

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

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

デバッグの停止が個々のプロセスに影響する方法を制御するには、[プロセス] ウィンドウでプロセスを右クリックし、[デバッグが停止したときにデタッチ] チェック ボックスをオンまたはオフにします。

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

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

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

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