編程技巧 --- 遠程調試

来源:https://www.cnblogs.com/pandefu/p/18354081
-Advertisement-
Play Games

引言 最近在做的項目上做了一些性能優化的工作,用到了 Visual Studio 遠程調試,所以本篇文章整理一下遠程調試技巧。 首先,瞭解一下 Visual Studio遠程調試是什麼? Visual Studio 的遠程調試功能允許在本地調試遠程電腦上運行的應用程式。用遠程調試,可以在本地電腦 ...


引言

最近在做的項目上做了一些性能優化的工作,用到了 Visual Studio 遠程調試,所以本篇文章整理一下遠程調試技巧。

首先,瞭解一下 Visual Studio遠程調試是什麼?

image

Visual Studio 的遠程調試功能允許在本地調試遠程電腦上運行的應用程式。用遠程調試,可以在本地電腦上設置斷點、查看變數和監視程式執行,能更輕鬆地診斷和解決問題。

其次 ,遠程調試能夠做什麼?

這對於調試在不同環境中運行的應用程式非常有用,例如在生產伺服器上或是在其他設備上,可以更高效地解決問題並提高開發效率。

對於調試同一環境下有進程間通信的的多個進程,也非常有用。

那麼,接下來實踐一下遠程調試。

遠程調試實操

那麼,接下來就實操一下遠程調試,首先,你需要做一些準備工作:

  • 你得有一臺需要遠程的電腦或伺服器,另一臺開發環境的電腦,該電腦Visual Studio 這個是必須安裝的,無論是 CommunityProfessionalEnterprise,均支持。
  • 要遠程調試的電腦與 Visual Studio 電腦必須通過網路(有線/無線)或通過乙太網電纜直接連接的方式連接在一起。 不支持在通過代理連接的兩台電腦之間進行調試。 也不建議通過高延遲或低帶寬連接的情況下連接,否則可能會導致調試失敗或速度過慢。
  • 設置遠程調試器[1],這是最重要的一環,遠程調試器是跟隨 Visula Studio 安裝時一同安裝的,若要遠程調試的電腦安裝了 Visula Studio, 可以直接找到他啟動,若要遠程的調試的電腦是純凈環境,那麼可以通過設置文件共用[1],將本機的遠程調試器共用以便調試,另外如果要遠程調試的電腦是伺服器,你需要經常進行這樣的遠程調試,則可以將遠程調試器配置為服務[1]

測試代碼

這裡我們寫一段簡單的控制台測試代碼,輸出當前電腦的基本信息:

using System;
using System.Management;
using System.Text;

class Program
{
    static void Main()
    {
        //回車後開始輸出,便於等待遠程調試接入
        Console.ReadLine();

        StringBuilder sb = new StringBuilder();

        sb.AppendLine("電腦基本信息:\n");

        // 獲取操作系統信息
        sb.AppendLine("操作系統信息:");
        var osQuery = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");
        foreach (var os in osQuery.Get())
        {
            sb.AppendLine($"名稱: {os["Caption"]}");
            sb.AppendLine($"版本: {os["Version"]}");
            sb.AppendLine($"製造商: {os["Manufacturer"]}");
            sb.AppendLine($"電腦名: {os["CSName"]}");
        }

        sb.AppendLine();

        // 獲取處理器信息
        sb.AppendLine("處理器信息:");
        var cpuQuery = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
        foreach (var cpu in cpuQuery.Get())
        {
            sb.AppendLine($"名稱: {cpu["Name"]}");
            sb.AppendLine($"製造商: {cpu["Manufacturer"]}");
            sb.AppendLine($"描述: {cpu["Description"]}");
        }

        sb.AppendLine();

        // 獲取記憶體信息
        sb.AppendLine("記憶體信息:");
        var memQuery = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
        foreach (var mem in memQuery.Get())
        {
            sb.AppendLine($"容量: {Math.Round(Convert.ToDouble(mem["Capacity"]) / (1024 * 1024 * 1024), 2)} GB");
            sb.AppendLine($"速度: {mem["Speed"]} MHz");
        }

        var str= sb.ToString();

        Console.Write(str);

        Console.ReadLine();
    }
}

然後在本機 Debug 一下看一下本機的信息:

image

確認代碼無問題後,將該解決方案以Debug發佈,生成Debug文件夾,這裡一定記住需要使用Debug發佈,遠程調試需要使用到Debug發佈生成的 .pdb 文件[2],具體.pdb 文件,後面的章節解釋。

將生成的生成Debug文件夾,拷貝或發佈到需要遠程的電腦或伺服器上
image

設置遠程調試器

上面說了,設置遠程調試器,是最重要的一環,遠程調試器是跟隨 Visula Studio 安裝時一同安裝的,若要遠程調試的電腦安裝了 Visula Studio, 可以直接找到它啟動,在與你的 Visual Studio 版本匹配的目錄中找到 msvsmon.exe ,比如我的是 Visula Studio 2022 ,則我的目錄為 :

  • C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Remote Debugger\x64msvsmon.exe
  • C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Remote Debugger\x86\msvsmon.exe

但是,一般我們都不會在發佈電腦或者伺服器上安裝調試環境,所以還有第二種方式,以文件共用的方式,將當前開發環境電腦的遠程調試器共用給發佈電腦或者伺服器。具體如何設置共用文件夾就不在這裡贅述了,我這裡使用 MobaXterm 遠程過去後自動添加了C盤的共用,可以直接使用。

image

接下來啟動遠程調試器(msvsmon.exe)並設置[3],這裡有兩個點需要註意:

  • 第一,需要以管理員許可權啟動 msvsmon.exe
  • 第二,啟動後需要在 工具->選項 中設置埠號和身份驗證。
  • 這裡預設埠是 4026,建議身份驗證設為無身份驗證時,一定勾選允許任何用戶進行調試。
    image

此時,遠程調試調試的所有準備工作就都準備完了。

附加進程

此時,如想要遠程調試程式,就需要在 Visula Studio 對遠程電腦或伺服器的程式進行附加進程。

遠程調試的進入路徑,實際上還是通過附加進程的方式,那麼附加進程又能做什麼呢?

Visual Studio 的附加進程功能允許開發人員將調試器附加到運行中的外部進程,以便在不中斷程式執行的情況下對其進行調試。通過附加進程,可以監視外部進程的運行狀態、查看變數和調用堆棧,以便診斷問題和進行性能優化。

這對於調試與應用程式交互的其他進程或第三方組件非常有用。附加進程功能可以幫助我們更全面地瞭解應用程式在運行時的行為,從而快速解決問題並改進代碼。

那麼,現在啟動遠程電腦或伺服器的測試程式。切換到開發環境的電腦使用 Visula Studio 進行附加進程,在調試->附加到進程,打開附加到進程界面,需要做如下四點設置:

  • 連接類型選擇-遠程(windows - 無身份驗證)。
  • 連接目標選擇遠程的目標電腦或伺服器IP地址+遠程調試器設置的埠號,預設為4026。
  • 選擇你要調試的目標進程。
  • 勾選顯示所有用戶的進程,防止找不到目標進程。

image

選中目標進程後,確認附加,就可以進行遠程調試了。從下圖可以看到,輸出了目標目標電腦或伺服器的電腦基本信息。
image

pdb文件

為什麼遠程調試中,一定要以Debug發佈呢?因為只有在Debug發佈,才會生成 .pdb 文件。
那麼什麼是 .pdb 文件?

程式資料庫 ( .pdb) 文件(也稱為符號文件)將項目源代碼中的標識符和語句映射到已編譯應用中的相應標識符和說明。 這些映射文件將調試器鏈接到源代碼,以進行調試。

.pdb 文件保存調試和項目狀態信息,使用這些信息可以對應用的調試配置進行增量鏈接。 在調試時,Visual Studio 調試器使用 .pdb 文件來確定兩項關鍵信息:

  • 要在 Visual Studio IDE 中顯示的源文件名和行號。
  • 在應用中停止的斷點位置。

調試器只會載入與在生成應用時創建的 .pdb 文件完全匹配的 .pdb 文件(即原始 .pdb 文件或副本),所以只有Debug發佈生成的 .pdb 文件才能與你當前的代碼完全映射,進而進行調試。

總結

遠程調試作為一種調試技巧,除了能夠在在本地環境中調試不同操作系統或遠程伺服器上的代碼外,還能夠通過多人共用遠程調試會話,協助解決問題和優化代碼,促進團隊協作,在 解決遠程伺服器上的問題,無需下載整個代碼庫,無需安裝調試環境,簡化問題排查流程,高效地解決問題,是一項非常實用,高效的技能。

參考鏈接

[1] Visual studio (windows)遠程調試 ---
https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging?view=vs-2022

[2] 調試程式中的符號(.pdb)和源文件 --- https://learn.microsoft.com/zh-cn/visualstudio/debugger/specify-symbol-dot-pdb-and-source-files-in-the-visual-studio-debugger?view=vs-2022

[3] 遠程調試c#項目 --- https://learn.microsoft.com/zh-cn/visualstudio/debugger/remote-debugging-csharp?view=vs-2022

作者: Niuery Daily

出處: https://www.cnblogs.com/pandefu/>

郵箱: [email protected]

關於作者:.Net Framework,.Net Core ,WindowsForm,WPF ,控制項庫,多線程

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出 原文鏈接,否則保留追究法律責任的權利。 如有問題, 可郵件咨詢。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 場景 我們經常需要從字元串中提取指定的值。 如果要設計一個平臺,常見提取策略都要支持。從零實現起來會比較麻煩。 希望實現一個整合常見提取策略的工具,便於在各個場景復用。 開源地址 value-extraction 值提取核心 值提取系列 字元串值提取工具-01-概覽 字元串值提取工具-02-java ...
  • Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Inje ...
  • 在Java中,使用GeoTools庫可以方便地處理地理空間數據,包括構建地理點、線、面等。以下是一個詳細的示例,展示如何使用GeoTools來創建地理點(Point)、線(LineString)和多邊形(Polygon)。 1. 準備工作 首先,確保我們已經添加了GeoTools庫到我們的項目中。如 ...
  • ​不管是傳統互聯網還是移動互聯網,實時數據傳輸都是剛需,比如以QQ、微信為代表的即時通信工具,能夠實時傳輸文本和圖片。其中一對一的圖文通信叫做私聊,多對多的圖文通信叫做群聊。 除了常見的圖文即時通信,還有實時音視頻通信,比如一對一的音頻通話、一對一的視頻通話等等,此時可採用WebRTC技術,有關We ...
  • Excel 是一款廣泛應用於數據處理、分析和報告製作的電子錶格軟體。在商業、學術和日常生活中,Excel 的使用極為普遍。本文將詳細介紹如何使用免費.NET庫將數據寫入到 Excel 中,包括文本、數值、數組、和DataTable數據的輸入。 C# 在Excel單元格中寫入文本、或數值 C# 在Ex ...
  • 首先看一下效果: 任意控制項可以附加一個文字在控制項的右上角,並帶有紅色背景 第一步,新建一個空的wpf項目: 第二步,創建一個類,取名為badge: 第三步,將badge的父類設置成 System.Windows.Documents.Adorner public class Badge : Adorn ...
  • Aspire8一文通 0、簡介 微軟Aspire是微軟今年推出的一個全新的平臺無關、語言無關的新框架,它的設計目的是簡化雲原生應用的開發、部署和管理過程。Aspire的讀音是[əˈspaɪər],它的意思是渴望(成就);有志(成為),利用它你可以構建新應用程式或將雲原生功能添加到現有的應用程式,或者 ...
  • 前言 在物聯網(IoT)和工業自動化領域,邊緣計算設備扮演著至關重要的角色。邊緣採集網關作為連接物理世界與數字世界的橋梁,負責收集感測器數據並將數據傳輸到雲端或本地數據中心進行處理。 本文將介紹一款基於 .NET 8 的跨平臺高性能邊緣採集網關的開源項目。希望通過這個項目能夠幫助大家搭建和部署高效的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...