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 MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...