前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
本文記錄的是在 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 開源項目
博客園博客只做備份,博客發佈就不再更新,如果想看最新博客,請到 https://blog.lindexi.com/
本作品採用知識共用署名-非商業性使用-相同方式共用 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發佈,但務必保留文章署名[林德熙](https://www.cnblogs.com/lindexi)(包含鏈接:https://www.cnblogs.com/lindexi ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我[聯繫](mailto:[email protected])。