Visual Studio デバッガーで実行中のプロセスへのアタッチ
適用対象:Visual Studio
Visual Studio for Mac
Visual Studio Code
ローカルまたはリモート コンピューターで実行中のプロセスに、Visual Studio デバッガーをアタッチできます。 プロセスの実行後、Visual Studio で
ヒント
実際のデバッグ シナリオに
ローカル コンピューターに実行中のプロセスをアタッチする
以前にアタッチしたプロセスにすばやく再アタッチするには、「
Visual Studio で
** [デバッグ]** > ** [プロセスにアタッチ]** を選択し (または** Ctrl** + ** Alt** + ** P** キーを押し)、** [プロセスにアタッチ]** ダイアログ ボックスを開きます。** [接続の種類]** を確認します。ほとんどの場合、
** [既定]** を使用することができます。 シナリオによっては、異なる種類の接続が必要になる場合があります。 詳細については、この記事の他のセクション、または「[ 一般的なデバッグ シナリオ](#BKMK_Scenarios) 」を参照してください。[接続先] をローカル コンピューター名に設定します。
** [使用可能なプロセス]** リストで、アタッチする 1 つまたは複数のプロセスを見つけて選択します。プロセスをすばやく選択するには、
** [プロセスをフィルター]** ボックスに名前または最初の文字を入力します。プロセス名がわからない場合は、一覧を参照してください。または、一般的なプロセス名の場合は「
[ 一般的なデバッグ シナリオ](#BKMK_Scenarios) 」を参照してください。
ヒント
** [プロセスにアタッチ]** ダイアログ ボックスが開いている間にバックグラウンドでプロセスが開始および停止される可能性があるため、実行中のプロセス リストが常に最新であるとは限りません。 いつでも** [更新]** を選択して、最新のリストを表示することができます。** [アタッチ先]** フィールドに、デバッグする予定のコードの種類が一覧表示されていることを確認します。 既定の** [自動]** 設定は、ほとんどの種類のアプリで機能します。** [既定]** の接続の種類を使用している場合は、アタッチするコードの種類を手動で選択できます。 それ以外の場合は、** [選択]** オプションが無効になる可能性があります。手動でコードの種類を選択するには:
- [選択] をクリックします。
** [コードの種類の選択]** ダイアログボックスで、** [次のコードの種類をデバッグする]** を選択します。 リスト内のプロセスにアタッチしようとしたときにエラーが発生した場合は、[ [コードの種類の選択]](../debugger/select-code-type-dialog-box.md) ダイアログ ボックスを使用して、問題の[ トラブルシューティング](#BKMK_Troubleshoot_attach_errors) を行うことができます。- デバッグするコードの種類を選択します。
- [OK] を選択します。
[接続] を選択します。
ヒント
同じプロセスが複数あるシナリオでは、[コマンド ライン] 列、または [タイトル] 列の w3wp プロセスの詳細を使用して、適切なプロセスを特定します。
注意
デバッグ用に複数のアプリにアタッチすることはできますが、デバッガーでアクティブになるアプリは一度に 1 つだけです。 アクティブなアプリは、Visual Studio の
リモート コンピューター上のプロセスにアタッチする
IIS に配置されている ASP.NET アプリケーションをデバッグする場合の詳細な手順については、
Visual Studio で
** [デバッグ]** > ** [プロセスにアタッチ]** を選択し (または** Ctrl** + ** Alt** + ** P** キーを押し)、** [プロセスにアタッチ]** ダイアログ ボックスを開きます。** [接続の種類]** を確認します。ほとんどの場合、
** [既定]** を使用することができます。 Linux やコンテナー化されたアプリのデバッグなど、一部のシナリオでは、別の接続の種類が必要です。 詳細については、この記事の他のセクション、または「[ 一般的なデバッグ シナリオ](#BKMK_Scenarios) 」を参照してください。** [接続先]** ボックスで、次のいずれかの方法を使用してリモート コンピューターを選択します。** [接続先]** の横にあるドロップダウン矢印を選択し、ドロップダウン リストからコンピューター名を選択します。** [接続先]** ボックスにコンピューター名を入力し、** Enter** キーを押します。Visual Studio で必要なポートがコンピューター名に追加されていることを確認します (<リモート コンピューター名>:port という形式で表示されます)。
Note
リモート コンピューター名を使用して接続できない場合は、IP とポート アドレス (
`123.45.678.9:4022` など) を使用してみてください。 4026 は、Visual Studio 2022 リモート デバッガーの既定のポートです。 その他のリモート デバッガーポートの割り当てについては、「[ リモート デバッガーのポートの割り当て](remote-debugger-port-assignments.md) 」を参照してください。Note
リモート コンピューター名を使用して接続できない場合は、IP とポート アドレス (
`123.45.678.9:4022` など) を使用してみてください。 4024 は、Visual Studio 2019 リモート デバッガーの既定のポートです。 その他のリモート デバッガーポートの割り当てについては、「[ リモート デバッガーのポートの割り当て](remote-debugger-port-assignments.md) 」を参照してください。** [接続先]** ボックスの横にある** [検索]** ボタンを選択し、** [リモート接続]** ダイアログボックスを開きます。** [リモート接続]** ダイアログ ボックスには、ローカル サブネット上にあるか、コンピューターに直接接続されているすべてのデバイスが一覧表示されます。 リモート デバイスを検出するには、場合によってはサーバー上の[ UDP ポート 3702 を開く](../debugger/remote-debugger-port-assignments.md) 必要があります。 目的のコンピューターまたはデバイスを選択し、** [選択]** をクリックします。
注意
** [接続の種類]** はデバッグ セッション間で保持されます。** [接続先]** 設定は、そのターゲットでデバッグ接続が正常に行われた場合にのみ、デバッグ セッション間で保持されます。** [更新]** をクリックして** [使用可能なプロセス]** リストを設定します。ヒント
** [プロセスにアタッチ]** ダイアログ ボックスが開いている間にバックグラウンドでプロセスが開始および停止される可能性があるため、実行中のプロセス リストが常に最新であるとは限りません。 いつでも** [更新]** を選択して、最新のリストを表示することができます。** [使用可能なプロセス]** リストで、アタッチする 1 つまたは複数のプロセスを見つけて選択します。プロセスをすばやく選択するには、
** [プロセスをフィルター]** ボックスに名前または最初の文字を入力します。プロセス名がわからない場合は、一覧を参照してください。または、一般的なプロセス名の場合は「
[ 一般的なデバッグ シナリオ](#BKMK_Scenarios) 」を参照してください。すべてのユーザー アカウントで実行されているプロセスを検索するには、
** [全ユーザーのプロセスを表示する]** チェック ボックスをオンにします。注意
信頼関係のないユーザー アカウントによって所有されているプロセスにアタッチしようとすると、セキュリティ警告の確認ダイアログ ボックスが表示されます。 詳細については、「
[ セキュリティ警告: 信頼されていないユーザーが所有するプロセスにアタッチするには危険が伴います。以下の情報に関して疑わしい点がある場合や、不明な場合は、このプロセスにアタッチしないでください](../debugger/security-warning-attaching-to-a-process-owned-by-an-untrusted-user.md) 」を参照してください。
** [アタッチ先]** フィールドに、デバッグする予定のコードの種類が一覧表示されていることを確認します。 既定の** [自動]** 設定は、ほとんどの種類のアプリで機能します。** [既定]** の接続の種類を使用している場合は、アタッチするコードの種類を手動で選択できます。 それ以外の場合は、** [選択]** オプションが無効になる可能性があります。手動でコードの種類を選択するには:
- [選択] をクリックします。
** [コードの種類の選択]** ダイアログボックスで、** [次のコードの種類をデバッグする]** を選択します。 リスト内のプロセスにアタッチしようとしたときにエラーが発生した場合は、[ [コードの種類の選択]](../debugger/select-code-type-dialog-box.md) ダイアログ ボックスを使用して、問題の[ トラブルシューティング](#BKMK_Troubleshoot_attach_errors) を行うことができます。- [OK] を選択します。
[接続] を選択します。
注意
デバッグ用に複数のアプリにアタッチすることはできますが、デバッガーでアクティブになるアプリは一度に 1 つだけです。 アクティブなアプリは、Visual Studio の
リモート デスクトップ (ターミナル サービス) セッションでのデバッグ時には、
どちらの方法も実行できない場合、3 つ目の方法として、Windows コマンド ラインから
Azure App Service (Windows) 上で実行されている .NET Core プロセスに添付する
Azure App Service (Windows) に発行する場合は、Azure での ASP.NET Core のリモート デバッグに関する記事、または「Azure App Service のデバッグ」を参照してください。
Azure App Service (Windows) 上で実行されている .NET Core プロセスに添付する
Azure App Service (Windows) に発行する場合は、発行プロファイルの [ホスティング] の下の [...] メニューの下に、 [デバッガーを添付する] オプションがあります。 Visual Studio は、プロファイルの発行対象である Azure App Service (Windows) のインスタンスにリモート デバッガーを添付しようと試みます。
SSH を使用して Linux 上で実行されている .NET Core プロセスにアタッチする
詳細については、
Docker コンテナー上で実行されているプロセスにアタッチする
Visual Studio 2019 以降では、Docker コンテナー上で実行されているプロセスに Visual Studio デバッガーをアタッチできます。 Linux .NET Core Docker コンテナーの場合は、「
プロセスに再アタッチする
以前にアタッチしたプロセスにすばやく再アタッチするには、
注意
一般的なデバッグ シナリオ
ユニバーサル Windows アプリ (UWP) アプリなどの一部のアプリの種類では、プロセス名に直接アタッチせず、代わりに Visual Studio の
C++ で記述されたコードにデバッガーをアタッチするには、コードが
クライアント側スクリプトのデバッグでは、ブラウザーでスクリプトのデバッグを有効にする必要があります。 Chrome 上でクライアント側スクリプトをデバッグするには、コードの種類として JavaScript または TypeScript を選択します。アプリの種類によっては、すべての Chrome インスタンスを閉じ、ブラウザーをデバッグ モードで起動する必要があります (コマンド ラインから「chrome.exe --remote-debugging-port=9222
」と入力します)。
クライアント側スクリプトのデバッグでは、ブラウザーでスクリプトのデバッグを有効にする必要があります。 Chrome 上でクライアント側スクリプトをデバッグするには、コードの種類として [JavaScript (Chrome)] または [JavaScript (Microsoft Edge - Chromium)] を選択します。アプリの種類によっては、すべての Chrome インスタンスを閉じ、ブラウザーをデバッグ モードで起動する必要があります (コマンド ラインから「chrome.exe --remote-debugging-port=9222
」と入力します)。 以前のバージョンの Visual Studio では、Chrome のスクリプト デバッガーは
アタッチする実行中のプロセスをすばやく選択するには、Visual Studio で
シナリオ | デバッグ方法 | プロセス名 | メモとリンク |
---|---|---|---|
ASP.NET Core - IIS サーバーでのリモート デバッグ | リモート ツールと |
.NET Core 3 以降では、 |
|
ASP.NET Core - デバッガーを使用せずにアプリを起動した後、ローカル コンピューター上でデバッグする | msedge.exe | これは、(たとえば) プロファイリング時など、アプリの読み込みを高速化するために役立ちます。 | |
ASP.NET 4 または 4.5 - IIS サーバー上でのリモート デバッグ | リモート ツールと |
||
クライアント側スクリプト - サポートされているアプリの種類について、ローカル IIS サーバー上でデバッグする | chrome.exe または msedge.exe | スクリプトのデバッグを有効にする必要があります。 Chrome の場合、Chrome をデバッグ モードで実行し (コマンド ラインから「chrome.exe --remote-debugging-port=9222 」と入力します)、[アタッチ先] フィールドで JavaScript または TypeScript を選択する必要もあります。 |
|
C#、Visual Basic、または C++ アプリ - ローカル コンピューター上でデバッグする | 標準のデバッグ ( |
<アプリ名>.exe | ほとんどのシナリオでは、 |
Windows デスクトップ アプリ - リモート デバッグ | リモート ツール | N/A | |
Linux 上の .NET Core - デバッグ | SSH を使用するには、 |
||
コンテナー化されたアプリ - デバッグ | |||
Linux 上の Python - リモート デバッグ | 「 |
||
サポートされている他の種類のアプリ - サーバー プロセスでのデバッグ | サーバーがリモートの場合は、リモート ツールを使用し、 |
chrome.exe、msedge.exe、またはその他のプロセス | 必要に応じて、リソース モニターを使用してプロセスを特定します。 「 |
ユニバーサル Windows アプリ (UWP)、OneCore、HoloLens、または IoT アプリ - リモート デバッグ | インストールされているアプリ パッケージのデバッグ | N/A | |
ユニバーサル Windows アプリ (UWP)、OneCore、HoloLens、または IoT - Visual Studio から起動しなかったアプリをデバッグする | インストールされているアプリ パッケージのデバッグ | N/A |
デバッガーの機能を使用する
プロセスにアタッチするときに Visual Studio デバッガーの全機能 (ブレークポイントのヒットなど) を使用するには、アプリがローカル ソースとシンボルに完全に一致する必要があります。 つまり、デバッガーで正しい
リモート デバッグのシナリオでは、Visual Studio でソース コード (またはソース コードのコピー) を開いておく必要があります。 リモート マシンでコンパイルされたアプリ バイナリは、ローカル コンピューター上と同じビルドのものである必要があります。
一部のローカル デバッグ シナリオでは、アプリに正しいシンボル ファイルが存在する場合、Visual Studio でソースにアクセスせずにデバッグできます。 既定では、これにはデバッグ ビルドが必要です。 詳細については、
アタッチ エラーをトラブルシューティングする
場合によっては、デバッグするコードの種類を正しく識別するためにデバッガーが必要になることがあります。 接続値が適切に設定されているものの (
実行中のプロセスにデバッガーがアタッチすると、このプロセスは、1 種類以上のコードを含むことができます。 デバッガーをアタッチできるコードの種類は
デバッガーは、ある種類のコードに正常にアタッチできても、別の種類にはアタッチできないことがあります。 通常、これは次の場合に発生します。
- リモート コンピューター上で動作しているプロセスにアタッチしようとしている。 リモート コンピューターには、一部の種類のコードにしか対応しないリモート デバッグ コンポーネントがインストールされている場合があるためです。
- ダイレクト データベース デバッグのために複数のプロセスにアタッチしようとしている。 SQL デバッグ機能は、単一プロセスへのアタッチのみをサポートします。
デバッガーが一部の種類のコードにしかアタッチできない場合は、アタッチできなかった種類を識別するメッセージが表示されます。
デバッガーが少なくとも 1 種類のコードに正常にアタッチできる場合は、プロセスのデバッグを開始できます。 正常にアタッチされたコードの種類のみをデバッグできます。 プロセス内のアタッチされていないコードは引き続き実行されますが、そのコードに対するブレークポイントの設定、データの表示、その他のデバッグ操作を実行することはできません。
デバッガーがコードの種類へのアタッチに失敗した理由についてより詳しい情報が必要な場合は、該当するコードの種類のみに再アタッチを試してください。
プロセスからデタッチします。
** [デバッグ]** メニューで** [すべてデタッチ]** を選択します。プロセスに再アタッチし、アタッチに失敗したコードの種類のみを選択します。
** [プロセスにアタッチ]** ダイアログ ボックスの** [選択可能なプロセス]** の一覧で、プロセスを選択します。[選択] を選択します。
** [コードの種類の選択]** ダイアログ ボックスの** [次のコードの種類をデバッグする]** をクリックし、アタッチに失敗したコードの種類を選択します。 他のコードの種類の選択を解除します。[OK] を選択します。
** [プロセスにアタッチ]** ダイアログ ボックスで、** [アタッチ]** を選択します。
このとき、アタッチは完全に失敗し、詳細なエラー メッセージが表示されます。
関連項目
[ 複数プロセスをデバッグする](../debugger/debug-multiple-processes.md) - Just-In-Time デバッグ
- リモート デバッグ