UOS 開啓 VisualStudio 遠程調試 .NET 應用之旅

本文記錄的是在 Windows 系統裏面,使用 VisualStudio 2022 遠程調試運行在 UOS 裏面 dotnet 應用的配置方法

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

我將以我的 UOS 虛擬機作爲例子告訴大家如何在 Windows 系統裏面,使用 VisualStudio 2022 遠程調試運行在 UOS 裏面 dotnet 應用。這裏的 dotnet 應用不僅包含純控制檯即可實現的 ASP.NET Core 也包括帶 GUI 的程序,包括 CPF 、 UNO/MAUI、 Avalonia 等 UI 框架上構建的可運行在 UOS Linux 系統上的應用

準備

第一步是保證 UOS 和 Windows 構成局域網網絡,或可直接聯通的網絡。這一步可自行了解網絡配置,只要雙方網絡能互通即可,掛在一個局域網內相同網段是最好的選擇

其次是在 UOS 裏面開啓開發者模式,開啓方法請參閱 如何打開開發者模式?-UOS官方文檔

準備工作就此兩步,接下來就是進行配置

配置

接着的配置步驟可以分爲兩大塊,分別是 SSH 的開啓以及 VisualStudio 的連接

開啓 SSH 的支持

默認的 UOS 是沒有開啓 SSH 的支持的,本文將使用 Tame-complexity 大佬在博客園裏面的寫的 Linux開啓ssh - Tame-complexity - 博客園 博客裏面的部分方法開啓 ssh 連接,具體步驟如下

先修改sshd服務配置文件,修改此文件需要權限

sudo su
> 輸入你的密碼
vi /etc/ssh/sshd_config

進入 sshd_config 編輯入以下代碼,這裏有一個可簡化的輸入方法,那就是一般此文件裏面只是包含大量被註釋掉的配置,只需要找到對應的配置,解開註釋即可

Port 22
ListenAddress 0.0.0.0
ListenAddress ::

PermitRootLogin yes
PasswordAuthentication yes

相信閱讀到這裏的夥伴是知道 vim 的基礎操作的,如果不瞭解的話,還請自行查閱一下 vim 如何編輯文件以及如何保存退出哈。簡單說就是按下 i 鍵進入編輯模式,然後使用 esc 鍵盤退出編輯模式,再輸入 :wq 即可完成保存退出

如果是解開註釋的話,需要小心 PermitRootLogin 配置項默認是 prohibit-password 的值,需要改爲 yes 纔對

![](image/UOS 開啓 VisualStudio 遠程調試 .NET 應用之旅/UOS 開啓 VisualStudio 遠程調試 .NET 應用之旅4.png)

配置完成之後,使用以下命令瞭解一下 ssh 的運行情況

/etc/init.d/ssh status

默認新裝的 UOS 都是關閉的狀態,請使用以下代碼進行開啓

/etc/init.d/ssh start

開啓之後,繼續使用 /etc/init.d/ssh status 命令瞭解一下狀態,預期是能夠正確開啓。如果不能正確開啓,再根據錯誤信息,自行解決

使用 VisualStudio 連接

打開一個 VisualStudio 2022 用於嘗試附加調試連接

點擊調試裏面的附加進程

點擊連接類型,切換到 ssh 類型

在連接目標裏面輸入 UOS 的網絡地址,這裏支持 IP 或域名,如果開啓的 SSH 端口非 22 端口,這裏也可以不用輸入端口,可以在後續界面再輸入。輸入完成之後按回車,或者點查找按鈕,但查找按鈕有時候會不工作,推薦還是按回車好

按下回車之後,可以看到如下界面,輸入你的端口和用戶名密碼,即可點擊連接

如果能夠看到提示是否要繼續連接,請點擊 是 按鈕

預期是能夠看到以下調試界面,如能看到則表示連接成功,如果連接失敗,請回到上一步,確定自己配置正確了 SSH 連接

常見的錯誤就是網絡連不通,以及輸入錯賬號密碼等

開啓調試

接下來將使用 dotnet-campus 開源的下載器項目作爲調試的例子

先從可用進程選中將要調試的應用,接着的細節是點擊附加到裏面,選擇手動以及選擇 託管(.NET Core for Unix)代碼 選項。這是因爲默認的 VisualStudio 的自動選擇經常不工作

點擊調試以下代碼類型,然後選擇 託管(.NET Core for Unix)代碼 即可

如果大家看到附加按鈕是禁用狀態,也可以嘗試以上的選擇 託管(.NET Core for Unix)代碼 步驟

完成配置之後,即可點擊附加按鈕,基本都能成功

但如果有遇到以下失敗的,提示 未能啓動調試適配器,可在輸出窗口查看額外的信息

Unable to find debugger script at 'home/lin/.vs-debugger'.

看到錯誤有以下代碼

[ERROR] 災難性故障 (異常來自 HRESULT:0x8000FFFF (E_UNEXPECTED))

也有類似如下錯誤輸出信息

11:34:39:958	未能啓動調試適配器“coreclr”。
11:34:39:958	Unable to find debugger script at '/home/lin/.vs-debugger'.
11:34:39:958	
11:34:39:958	
11:34:39:959	初始化日誌:
11:34:39:959	Determining user folder on remote system...
11:34:39:959	Checking for existing installation of debugging tools...
11:34:39:959	Downloading debugger launcher...
11:34:39:959	Creating debugger installation folder: /home/lin/.vs-debugger
11:34:39:959	Failed: 無法創建或訪問指定的目錄 /home/lin/.vs-debugger。
11:34:39:959	參數名: path
11:34:39:959	Unable to find debugger script at '/home/lin/.vs-debugger'.
11:34:39:959	Failed: Unable to find debugger script at '/home/lin/.vs-debugger'.

那就是 VisualStudio 創建 .vs-debugger 文件夾失敗

或提示 Failed: The specified directory /home/lin/.vs-debugger could not be created or accessed. 等信息

可使用以下方法解決。回到 UOS 命令行裏面,退出 sudo su 狀態,使用用戶權限創建 ~/.vs-debugger 文件夾

exit

cd ~

mkdir .vs-debugger

以上的 exit 命令僅僅爲了退出 sudo su 狀態,如果你是新開的控制檯,那請不要帶上 exit 命令

完成以上命令之後,再次嘗試在 VisualStudio 附加調試

預期能夠看到正在啓動調試適配器界面

看到此界面表示 VisualStudio 正在幫你部署調試環境,首次部署輸入比較慢,大概需要在你的 UOS 下載 200MB 的內容

如果等太久,可以進入 ~/.vs-debugger 輸入 du -sh 命令查看大小,就可以知道是否正在下載

接下來就進入到了咱熟悉的 VisualStudio 調試 .NET 應用的狀態了

試試點擊 VisualStudio 的暫停按鈕,看看線程和堆棧

此調試方式配合 dotnet-campus 開源的 SyncTool 工具使用更好,通過 SyncTool 將 Windows 上的 VisualStudio 構建輸出內容同步到 Linux 設備上,然後使用遠程調試方式進行調試

詳細請參閱 SyncTool 開源項目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章