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

来源:https://www.cnblogs.com/lindexi/p/18086533
-Advertisement-
Play Games

前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如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])。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...