02.26 10個用於C#.NET開發的基本調試工具

在調試軟件時,工具非常重要。獲取正確的工具,然後再調試時提取正確的信息。根據獲取的正確的錯誤信息,可以找到問題的根源所在。找到問題根源所在,你就能夠解決該錯誤了。

你將看到我認為最基本的解決在C# .NET 中錯誤問題的工具的列表。這些將幫助你找到任何難題的根本原因並加以解決。

出處:https://www.cnblogs.com/sesametech-netcore/

除了代碼中的常見問題外,一下工具還可以處理各種問題類型,包括:

  • 性能問題
  • 內存問題(GC壓力和內存洩漏)
  • 第三方引用庫問題
  • 生產中的問題
  • 網絡問題

1、Visual Studio

當涉及調試時,我們的主要工具就是Visual Studio。它是世界上最好的IDE之一,而不僅僅是在.NET 領域。它具有大量功能來幫助你進行調試,包括各種工具窗口,異常選項,工具提示等。根據2019年StackOverflow的調查,微軟設法將基本功能和高級功能都整合到一個非常直觀的程序中,是Visual Sudio成為所有開發人員第二受歡迎的IDE。

近年來,出現了兩個競爭對手來挑戰.NET IDE 領域:Rider和Visual Studio Code。根據我的經驗,兩者的調試功能仍然遠遠落後於Visual Studio。儘管Rider的重構功能和性能令人印象深刻。

除了交互式(傳統)調試,VS還包括許多其他分析工具:

  • 性能分析
  • 內存分析
  • 使用IntelliTrace進行歷史調試
  • 雲調試(作為雲探索的一部分)

對於上述所有類別,我更喜歡使用其他工具。繼續進行閱讀,它們都在本次清單中。

2、dnSpy

dnSpy 是用於 .NET 調試的最有用的工具之一。它是一個很好的反編譯器。但是它的主要用途是作為調試器。dnSpy允許你調試任何 .NET程序你,而無需考慮符號或者源代碼。

該工具的外觀和感覺類似於Visual Studio。當你開始調試沒有符號或者源代碼的.NET進程時,dnSpy將向你顯示反編譯的代碼。現在,這裡有個魔術:你可以在反編譯的代碼本上中放置斷點。遇到這些斷點時,你將看到局部變量,線程,調用堆棧,並具有完整的調試經驗。這使dnSpy成為調試第三方代碼和調試生產環境的首選工具。

它輕巧,無需安裝。只需將文件夾複製到任何生產機器上,然後開始調試。

10個用於C#.NET開發的基本調試工具

dnSpy

這個工具有個小竅門。如果你使用dnSpy啟動進程,那麼一切將正常運行。但是,如果你附加到正在運行的進程時,則已加載的模塊將保持優化狀態。也就是說它們是在Release模式下構建的。優化代碼後,將不會遇到某些斷點,也不會顯示某些局部變量。這幾乎破壞了調試體驗。解決方案是使用dsSpy啟動進程,而不是附加到進程中。

3、dotPeek

dotPeek是JetBrains的免費.NET反編譯器。它們的許多工具實際上進入了該列表。與兩個反編譯器(如ILSpy或JustDecompile)相比,我更喜歡dotPeek,這有兩個原因:

  1. dotPeek提供了更好的用戶體驗。或至少我感到自在。它看起來和感覺都像Resharper。所以這可能是原因。
  2. dotPeek可以從任何程序集中創建符號服務區,即使沒有符號或源代碼也是如此。它像dnSpy一樣,它或反編譯代碼並從中創建符號。藉助dotPeek,Visual Studio就像dnSpy一樣調試任何第三方代碼。要查看準確程度,請參閱我的文章:在Visual Studio中調試沒有符號的第三方.NET代碼,後續會進行翻譯。

4、dotTrace

dotTrace是JetBrains的另一個出色工具。這是我最喜歡的性能分析工具。dotTrance允許你“記錄”應用程序的運行,然後分析記錄的性能。你將能夠看到每種調用方法花費了多長時間,數據庫條用,HTTP請求以及垃圾回收期間花費的時間等等。

10個用於C#.NET開發的基本調試工具

dotTrace

上圖顯示了對Visual Studio的簡短記錄分析。你可以看到ShowWindow花費了155毫秒,其中包括HwndSourceHook(42ms),Convert(16ms)等方法用時。此方法的執行包括42%的WPF調用,20%的用戶代碼,12%的GC等待,10%的Collections代碼,10%的反射和5%的系統代碼。太好了吧?

首先,這是一個學習曲線,但是一旦習慣了,它會變得非常直觀。

5、SciTech's .NET Memory Profiler

內存分析器是解決內存問題必不可少的另一類工具。這些可能是由於GC(GC壓力)引起的內存洩露或性能影響。如果你有足夠大的應用程序,那麼遲早會遇到內存問題。我希望為你以後著想,因為這些類型的問題可能是毀滅性的。

內存探查器可以拍攝“內存快照”,並讓你對器進行調查。你將看到哪些對象佔用最多的內存,誰引用了它們,以及為什麼未進行垃圾回收。通過比較兩個快照,可以發現內存洩露。

有幾種可用的內存分析器,但是SciTech's .NET Memory Profiler是我的最愛。我發現它是功能最強大的產品,問題最少。

6、OzCode

OzCode是獨特的Visual Studio擴展。其唯一目的是幫助你在Visual Studio中進行交互式調試。OzCode具有很多功能,可以分為4部分:

1.上方顯示 - OzCode在調試期間添加了一些有用的可視化功能。這包括紅色/綠色突出顯示並顯示對象的選定屬性:

10個用於C#.NET開發的基本調試工具

1

還有其他內容,例如將表達式分解成各個部分:

10個用於C#.NET開發的基本調試工具

2

2.LINQ調試 - LINQ在編寫代碼時很棒,但是很難調試。OzCode允許在調試過程中以幾乎完美的方式研究LINQ表達式。

10個用於C#.NET開發的基本調試工具

3

要了解有關使用或不使用OzCode調試LINQ的更多信息,請查看我的文章:如何在C#中調試LINQ查詢。

3.數據提示 - 數據提示是將鼠標懸停在Visual Studio中的變量上時看到的彈出窗口。OzCode用自己的更好的數據提示替換了該窗口。它允許“收藏夾”屬性,搜索,導出為JSON和其他功能。

4.時間穿梭 - OzCode 4 添加了新的革命性調試功能。它可以預測未來而無需移動斷點。也就是說,你將能夠看到當前調試位置之後發生的代碼行中發生的情況。不過,此功能並非在所有情況下都有效。例如,OzCode無法預測HTTP請求結果或SQL請求之類的事情,因為它必須為此執行它們。

10個用於C#.NET開發的基本調試工具

4

7、SysInternals Suite

SysInternals是一套用於對Windows軟件進行故障排除和監視的實用程序。它包括一些我們調試所需的最重要的工具。我建議下載整個套件並將其保存在易於命令行鍵入的位置,例如:C:\\Sysinternals。有很多工具,其中一些比其他工具更有用。讓我們列出一些.NET最重要的。

Process Explorer

Process Explorer就像類固醇上的Windows Task Manager。它具有許多對調試有用的功能,這裡是其中的一些:

  • 查看加載的模塊
  • 查看句柄
  • 創建Dump
  • 查看進程樹
  • 查看性能計數器

Process Monitor

Process Monitor 也稱為ProcMon,允許你監視流程活動事件。具體的說,你可以彈道註冊表事件,文件事件,網絡事件,線程活動和性能分析事件。如果你想找出你的過程涉及哪些文件或註冊表,那麼ProcMon可以為你提供幫助。

10個用於C#.NET開發的基本調試工具

Process Monitor

ProcDump

ProcDump是用於保存轉儲文件的命令行工具。它可以立即或在觸發器上生成轉儲。例如,在崩潰或掛起時創建轉儲。這是我推薦的用於捕獲轉儲的工具。以下是它的一些功能:

  • 立即創建轉儲
  • 創建具有特定間隔的多個轉儲(例如3個轉儲,相隔5秒)
  • 一旦超過CPU閾值,就創建轉儲
  • 如果進程掛起,則創建轉儲
  • 崩潰時創建轉儲

若要查找有關ProcDump和Dump的更多信息,請參閱我的文章:2019年如果創建、使用和調試.NET 應用程序崩潰轉儲。

8、Performance Monitor (PerfMon)

Windows中有一種稱為“性能計數器”的內置機制。這些計數器可讓你根據計算機上發生的事情跟蹤大量有用的指標。這些可能是系統範圍內的指標,也可能是針對特定過程的指標。以下是一些可以使用性能計數器衡量的事情的示例:

  • CPU使用率
  • 內存使用率
  • 進程中引發的異常數
  • I/O字節的讀寫
  • 對你的asp.net應用程序的請求數
  • 在asp.net應用程序中請求響應時間

你可能會監視成千上萬種不同的計數器,它們會盡可能的具體。例如,如果你想了解進程的內存使用情況,則有以下計數器:私有字節,虛擬字節,工作集,私有工作集,Gen X 集合,GC時間百分比,大對象堆大小 等等。

性能監視器是使你可以直觀地看到這些計數器的工具(儘管也有其他工具)。它以在Windows設備預安裝上了。要運行它,只需要在開始菜單中鍵入“Performance Monitor”,或在命令提示符下鍵入perfmon。

10個用於C#.NET開發的基本調試工具

PerfMon

9、PerfView

PerfView是一個開源通用分析工具。它可以做很多事情,以下是其中一些:

  • 性能分析
  • 內存分析
  • 分析ETW事件
  • 從Linux導入性能快照
  • 有關應用程序行為的各種報告,包括JIT編譯時間,垃圾回收時間等

它的分析是基於Windows事件跟蹤(ETW)事件。這是一個內置的日誌記錄系統,運行速度非常快,Windows的每個部分都可以使用它。一切都將事件記錄到ETW,包括內核,Windows操作系統,CLR運行時,IIS,ASP.NEt框架,WPF等。

PerfView很容易成為此列表中最複雜的工具。但是它也非常強大。要開始使用PerfView,我建議在第九頻道觀看Vance Morrison的視頻課程系統。

10個用於C#.NET開發的基本調試工具

PerfView

10、Fiddler

Fiddler是Progress Telerik的免費工具。這是我最喜歡的網絡請求調試工具之一。它被稱為HTTP代理服務器,僅此而已。它捕獲所有HTTP請求,記錄數據,並按其方式發送請求。

10個用於C#.NET開發的基本調試工具

Fiddler

對於每一個請求,你都可以查看流程,Headers,payload,response,status等所有的內容。

對於調試,Fiddler具有兩個有用功能:

  • 重新請求 - 你可以右鍵單擊任何請求,然後單擊“Replay”,這將再次發送完全相同的請求。在調試服務器端問題時非常有用。如果你要重現有問題的請求,Fiddler可以避免在客戶端上重新運行方案以再次發送相同請求的麻煩。它還有助於處理難以重現的請求。
  • 編輯並重新請求 - 除了重新請求外,Fiddler允許我們修改請求。你可以更改標題,正文,甚至URL本身。你可以使用它來查看服務器端如何處理極端情況。或重現特定請求上發生的問題。

哪一個沒有提到

你可能會想知道我未提及的某些工具,如果你已經做開發很長時間了,你可能會想到WinDbg。如果你不熟悉WinDbg,它是一個命令行調試器,曾經是Windows的主要調試工具。有點像現在的Visual Studio用於.NET。我覺得這在2020年以及以後並不重要。至少不適用於.NET開發。你可以使用Visual Studio進行幾乎所有操作,並且它將變得越來越容易和快捷。

WinDbg的某些功能仍然是好的。像它的腳本功能一樣,易於遠程處理和方便的生產調試。你可以將

WinDbg複製到生產計算機上,並快速調查轉儲文件。它不需要像Visual Studio這樣的大型安裝。但是我總是發現自己將轉儲文件複製到我的開發機器上,並使用內存分析器或者Visual Studio打開它們。這樣更加有效。因此,我認為WinDbg不再是.NET開發所必需的調試工具。

總結

我們介紹了一些最佳的調試工具。我認為,瞭解這些工具對於成為高級開發人員至關重要。其中提到了一些可以用其類別中的類似工具代替。例如,你可以將dotMemory用作內存分析器,Visual Studio的內置分析器甚至PrefView。或者你可以使用RedGate的性能分析器來代替dotTrace。

無論你選擇什麼,都至少知道一個性能分析器可以幫助你解決本來會遇到的難題。內存分析器、生產調試工具(如dnSpy),反編譯器以及其餘的工具也是如此。

歡迎大家關注,轉發,祝大家調試愉快!!!


分享到:


相關文章: