共用方式為


透過附加至進程,使用 SSH 在 Linux 上偵錯 .NET Core

從 Visual Studio 2017 開始,您可以透過 Secure Shell (SSH) 附加至在本機或遠端 Linux 部署上執行的 .NET Core 和 .NET 5+ 進程。 本文說明如何設定偵錯環境以及如何進行偵錯。 如需使用 Docker 容器的偵錯案例,請參閱 附加至 Docker 容器上執行的進程容器工具 文章。 若要從 Visual Studio 偵錯 WSL 2 上的 Linux (不附加至進程),請參閱 使用 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
    

    必須啟用 SFTP 以及 SSH。 大多數 SSH 發行版預設會安裝並啟用 SFTP,但情況並非總是如此。

  • 在 Linux 伺服器上, 在 Linux 上安裝 .NET 執行階段,並尋找符合 Linux 發行版 (例如 Ubuntu) 的頁面。 不需要 .NET SDK。

    為確保必要的 .NET 除錯服務可供除錯,避免將應用程式發佈為單一檔案執行檔。

  • 如需完整的 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 機器的處理程序清單顯示在 [連接至處理程序 ] 對話方塊中。

    附加到 Linux 程序的屏幕截圖。

    附加到 Linux 程序的屏幕截圖。

  5. 選擇 [附加]。

    在出現的對話方塊中,選取您要偵錯的程式碼類型。 選擇 受控 (.NET Core 適用於 Unix)

  6. 使用 Visual Studio 偵錯功能來偵錯應用程式。

    在下列範例中,您會看到 Visual Studio 偵錯工具在遠端 Linux 電腦上執行的程式碼中的某個中斷點停止。

    打到斷點的螢幕截圖。

    打到斷點的螢幕截圖。