プロセスにアタッチして 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 マシン上で実行されている場合は、デバッガーをアタッチする準備ができています。

  1. Visual Studio で、 [デバッグ]>[プロセスにアタッチ] と選択します。

  2. [接続の種類] の一覧で、 [SSH] を選択します。

  3. [接続ターゲット] を、ターゲット コンピュータの IP アドレスまたはホスト名に変更します。

    資格情報をまだ指定していない場合は、パスワードや秘密キー ファイルを入力するように求められます。

    SSH サーバーが実行されているポートを除き、構成するポートの要件はありません。

  4. デバッグするプロセスを見つけます。

    コードは、一意のプロセス名または dotnet という名前のプロセスで実行されます。 対象のプロセスを見つけるには、 [タイトル] 列を確認します。この列には、プロセスのコマンド ライン引数が表示されます。

    次の例では、SSH トランスポート経由のリモート Linux マシンからのプロセスの一覧が、 [プロセスにアタッチ] ダイアログ ボックスに表示されています。

    Attach to Linux process

  5. [アタッチ] をクリックします。

  6. 表示されるダイアログ ボックスで、デバッグするコードの種類を選択します。 [マネージド (Unix 用 .NET Core)] を選択します。

  7. Visual Studio のデバッグ機能を使用して、アプリをデバッグします。

    次の例では、リモート Linux マシンで実行されているコード内のブレークポイントで Visual Studio デバッガーが停止していることがわかります。

    Hit a breakpoint