本文將告訴大家,如何使用 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!");
本文程式碼放在 github 和 gitee 上,可以使用如下命令列拉取程式碼
先建立一個空資料夾,接著使用命令列 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 資料夾,即可獲取到原始碼