プロセスにアタッチして SSH を使用して Linux 上で .NET Core をデバッグする
Visual Studio 2017 以降では、Secure Shell (SSH) 経由でローカルまたはリモートの Linux デプロイで実行されている .NET Core および .NET 5 以降のプロセスにアタッチできます。 この記事では、デバッグのセットアップ方法とデバッグ方法について説明します。 Docker コンテナーを使用したデバッグ シナリオについては、代わりに「Docker コンテナー上で実行されているプロセスにアタッチする」とコンテナー ツールに関する記事を参照してください。 WSL 2 で Linux を Visual Studio からデバッグするには (プロセスにアタッチしない)、「Visual Studio を使用して WSL 2 で .NET Core アプリをデバッグする」を参照してください。
注意
Azure Kubernetes Service (AKS) で実行されている Linux をデバッグする場合は、プロセスにアタッチするのではなく、Bridge to Kubernetes をお勧めします。
必須コンポーネント
Linux サーバーでは、SSH サーバーをインストールする必要があります。curl または wget で解凍してインストールします。 たとえば、Ubuntu では、以下を実行して行うことができます。
sudo apt-get install openssh-server unzip curl
SSH だけでなく SFTP も有効にする必要があります。 ほとんどの SSH ディストリビューションでは既定で SFTP がインストールされ、有効化されますが、必ずそうなるわけではありません。
Linux サーバーで、Linux に .NET ランタイムをインストールし、使用する Linux ディストリビューション (Ubuntu など) に一致するページを探します。 .NET SDK は必要ありません。
包括的な ASP.NET Core の手順については、「Nginx 搭載の Linux で ASP.NET Core をホストする」と「Apache 搭載の Linux で ASP.NET Core をホストする」を参照してください。
デバッグ用にアプリケーションを準備する
デバッグ用にアプリケーションを準備するには:
- アプリケーションをビルドするときに、デバッグ構成の使用を検討します。 デバッグ コンパイルされたコードより、リテール コンパイルされたコード (リリース構成) をデバッグする方が非常に困難です。 リリース構成を使用する必要がある場合は、まず [マイ コードのみ] を無効にします。 この設定を無効にするには、 [ツール]>[オプション]>[デバッグ] の順に選択し、 [マイ コードのみを有効にする] をオフにします。
- 移植可能な PDB (既定の設定) を生成するようにプロジェクトが構成されていることを確認し、PDB が DLL と同じ場所にあることを確認します。 Visual Studio でこれを構成するには、プロジェクトを右クリックし、[プロパティ]>[全般]>[デバッグ シンボル] を選択します。
- 移植可能な PDB (既定の設定) を生成するようにプロジェクトが構成されていることを確認し、PDB が DLL と同じ場所にあることを確認します。 Visual Studio でこれを構成するには、プロジェクトを右クリックし、 [プロパティ]>[ビルド]>[詳細]>[デバッグ情報] を選択します。
アプリケーションをビルドしてデプロイする
デバッグする前に、いくつかの方法を使用してアプリを配置できます。 たとえば、次のように操作できます。
ソースをターゲット コンピューターにコピーし、Linux コンピューター上で
dotnet build
を使用してビルドします。Windows 上でアプリをビルドし、ビルド成果物を Linux コンピューターに転送します。 (ビルド成果物は、アプリケーション自体、移植可能な PDB、依存する可能性のあるランタイム ライブラリ、および .deps.json ファイルで構成されます。)
アプリが配置されたら、アプリケーションを起動します。
デバッガーをアタッチします。
アプリケーションが Linux マシン上で実行されている場合は、デバッガーをアタッチする準備ができています。
Visual Studio で、 [デバッグ]>[プロセスにアタッチ] と選択します。
[接続の種類] の一覧で、 [SSH] を選択します。
[接続ターゲット] を、ターゲット コンピュータの IP アドレスまたはホスト名に変更します。
資格情報をまだ指定していない場合は、パスワードや秘密キー ファイルを入力するように求められます。 秘密キー ファイルの使用の詳細については、「リモート接続の設定」を参照してください。
SSH サーバーが実行されているポートを除き、構成するポートの要件はありません。
デバッグするプロセスを見つけます。
コードは、一意のプロセス名または dotnet という名前のプロセスで実行されます。 対象のプロセスを見つけるには、 [タイトル] 列を確認します。この列には、プロセスのコマンド ライン引数が表示されます。
次の例では、SSH トランスポート経由のリモート Linux マシンからのプロセスの一覧が、 [プロセスにアタッチ] ダイアログ ボックスに表示されています。
[アタッチ] をクリックします。
表示されるダイアログ ボックスで、デバッグするコードの種類を選択します。 [マネージド (Unix 用 .NET Core)] を選択します。
Visual Studio のデバッグ機能を使用して、アプリをデバッグします。
次の例では、リモート Linux マシンで実行されているコード内のブレークポイントで Visual Studio デバッガーが停止していることがわかります。