VisualStudio 如何 SSH 遠端除錯 Linux 的 dotnet 應用的啟動

lindexi發表於2024-06-08

本文將告訴大家,如何使用 VisualStudio 2022 工具,透過 SSH 遠端除錯執行在 Linux 系統上的 dotnet 系應用的啟動過程

本文寫於 2024.06.07 如果你閱讀本文的時間距離本文編寫的時間過於長,那本文可能包含過期的知識

當前的 VisualStudio 2022 不能和在 Windows 一樣,在 Linux 上一鍵進入構建且除錯。只好透過遠端除錯的方式進行附加,而附加程序時,可能所需除錯的是應用啟動過程的邏輯,這將導致除錯附加過去時,應用已經跑過了啟動邏輯,導致無法進行除錯

儘管編寫一個 VisualStudio 外掛可以很好的解決此問題,然而現在我沒有那麼有空,本文將告訴大家一個簡單的方式,可以不依靠任何第三方工具,就使用現成的 VisualStudio 即可實現遠端除錯執行在 Linux 系統上的 dotnet 系應用的啟動過程

開始之前,請參閱 UOS 開啟 VisualStudio 遠端除錯 .NET 應用之旅 部落格搭建好環境

在需要除錯啟動的 dotnet 應用裡面,在 Program 的 Main 方法新增如下程式碼

while (!Debugger.IsAttached)
{
    await Task.Delay(100);
}
Debugger.Break();

以上程式碼的含義就是,如果沒有被附加,則不退出迴圈。被附加之後,進入 Debugger.Break 斷點。如此即可讓應用在沒有附加除錯時,一直卡住,不會執行啟動邏輯,直到被附加除錯之後,才進入斷點,開發者就可以方便除錯應用的啟動

此方法適用於所有 dotnet 系應用,包括 MAUI 、Avalonia 、CPF、GtkWinform、UNO 等能在 Linux 上執行的 UI 框架的應用

例子的全部程式碼如下

// Program.cs

using System.Diagnostics;

while (!Debugger.IsAttached)
{
    await Task.Delay(100);
}
Debugger.Break();

Console.WriteLine("Hello, World!");

本文程式碼放在 githubgitee 上,可以使用如下命令列拉取程式碼

先建立一個空資料夾,接著使用命令列 cd 命令進入此空資料夾,在命令列裡面輸入以下程式碼,即可獲取到本文的程式碼

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin fdc4816aba71f2cc6bfdcb6c7ca0bba2f0ac2b8c

以上使用的是 gitee 的源,如果 gitee 不能訪問,請替換為 github 的源。請在命令列繼續輸入以下程式碼,將 gitee 源換成 github 源進行拉取程式碼

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin fdc4816aba71f2cc6bfdcb6c7ca0bba2f0ac2b8c

獲取程式碼之後,進入 X11/BalcawheldereFukenallbe 資料夾,即可獲取到原始碼

相關文章