UOS 開啟 VisualStudio 遠端除錯 .NET 應用之旅

lindexi發表於2024-04-25

本文記錄的是在 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 開源專案

相關文章