在調試軟件時,工具很是重要。獲取正確的工具,而後再調試時提取正確的信息。根據獲取的正確的錯誤信息,能夠找到問題的根源所在。找到問題根源所在,你就可以解決該錯誤了。html
你將看到我認爲最基本的解決在C# .NET 中錯誤問題的工具的列表。這些將幫助你找到任何難題的根本緣由並加以解決。數據庫
除了代碼中的常見問題外,一下工具還能夠處理各類問題類型,包括:服務器
當涉及調試時,咱們的主要工具就是Visual Studio。它是世界上最好的IDE之一,而不只僅是在.NET 領域。它具備大量功能來幫助你進行調試,包括各類工具窗口,異常選項,工具提示等。根據2019年StackOverflow的調查,微軟設法將基本功能和高級功能都整合到一個很是直觀的程序中,是Visual Sudio成爲全部開發人員第二受歡迎的IDE。網絡
近年來,出現了兩個競爭對手來挑戰.NET IDE 領域:Rider和Visual Studio Code。根據個人經驗,二者的調試功能仍然遠遠落後於Visual Studio。儘管Rider的重構功能和性能使人印象深入。app
除了交互式(傳統)調試,VS還包括許多其餘分析工具:框架
對於上述全部類別,我更喜歡使用其餘工具。繼續進行閱讀,它們都在本次清單中。asp.net
dnSpy 是用於 .NET 調試的最有用的工具之一。它是一個很好的反編譯器。可是它的主要用途是做爲調試器。dnSpy容許你調試任何 .NET程序你,而無需考慮符號或者源代碼。ide
該工具的外觀和感受相似於Visual Studio。當你開始調試沒有符號或者源代碼的.NET進程時,dnSpy將向你顯示反編譯的代碼。如今,這裏有個魔術:你能夠在反編譯的代碼本上中放置斷點。遇到這些斷點時,你將看到局部變量,線程,調用堆棧,並具備完整的調試經驗。這使dnSpy成爲調試第三方代碼和調試生產環境的首選工具。工具
它輕巧,無需安裝。只需將文件夾複製到任何生產機器上,而後開始調試。 性能
這個工具備個小竅門。若是你使用dnSpy啓動進程,那麼一切將正常運行。可是,若是你附加到正在運行的進程時,則已加載的模塊將保持優化狀態。也就是說它們是在
Release
模式下構建的。優化代碼後,將不會遇到某些斷點,也不會顯示某些局部變量。這幾乎破壞了調試體驗。解決方案是使用dsSpy啓動進程,而不是附加到進程中。
dotPeek是JetBrains的免費.NET反編譯器。它們的許多工具實際上進入了該列表。與兩個反編譯器(如ILSpy或JustDecompile)相比,我更喜歡dotPeek,這有兩個緣由:
dotTrace是JetBrains的另外一個出色工具。這是我最喜歡的性能分析工具。dotTrance容許你「記錄」應用程序的運行,而後分析記錄的性能。你將可以看到每種調用方法花費了多長時間,數據庫條用,HTTP請求以及垃圾回收期間花費的時間等等。
上圖顯示了對Visual Studio的簡短記錄分析。你能夠看到ShowWindow
花費了155毫秒,其中包括HwndSourceHook
(42ms),Convert
(16ms)等方法用時。此方法的執行包括42%的WPF調用,20%的用戶代碼,12%的GC等待,10%的Collections
代碼,10%的反射和5%的系統代碼。太好了吧?
首先,這是一個學習曲線,可是一旦習慣了,它會變得很是直觀。
內存分析器是解決內存問題必不可少的另外一類工具。這些多是因爲GC(GC壓力)引發的內存泄露或性能影響。若是你有足夠大的應用程序,那麼早晚會遇到內存問題。我但願爲你之後着想,由於這些類型的問題多是毀滅性的。
內存探查器能夠拍攝「內存快照」,並讓你對器進行調查。你將看到哪些對象佔用最多的內存,誰引用了它們,以及爲何未進行垃圾回收。經過比較兩個快照,能夠發現內存泄露。
有幾種可用的內存分析器,可是SciTech's .NET Memory Profiler是個人最愛。我發現它是功能最強大的產品,問題最少。
OzCode是獨特的Visual Studio擴展。其惟一目的是幫助你在Visual Studio中進行交互式調試。OzCode具備不少功能,能夠分爲4部分:
1.上方顯示 - OzCode在調試期間添加了一些有用的可視化功能。這包括紅色/綠色突出顯示並顯示對象的選定屬性:
還有其餘內容,例如將表達式分解成各個部分:
2.LINQ調試 - LINQ在編寫代碼時很棒,可是很難調試。OzCode容許在調試過程當中以幾乎完美的方式研究LINQ表達式。
要了解有關使用或不使用OzCode調試LINQ的更多信息,請查看個人文章:如何在C#中調試LINQ查詢。
3.數據提示 - 數據提示是將鼠標懸停在Visual Studio中的變量上時看到的彈出窗口。OzCode用本身的更好的數據提示替換了該窗口。它容許「收藏夾」屬性,搜索,導出爲JSON和其餘功能。
4.時間穿梭 - OzCode 4 添加了新的革命性調試功能。它能夠預測將來而無需移動斷點。也就是說,你將可以看到當前調試位置以後發生的代碼行中發生的狀況。不過,此功能並不是在全部狀況下都有效。例如,OzCode沒法預測HTTP請求結果或SQL請求之類的事情,由於它必須爲此執行它們。
SysInternals是一套用於對Windows軟件進行故障排除和監視的實用程序。它包括一些咱們調試所需的最重要的工具。我建議下載整個套件並將其保存在易於命令行鍵入的位置,例如:C:\Sysinternals
。有不少工具,其中一些比其餘工具更有用。讓咱們列出一些.NET最重要的。
Process Explorer就像類固醇上的Windows Task Manager。它具備許多對調試有用的功能,這裏是其中的一些:
Process Monitor 也稱爲ProcMon,容許你監視流程活動事件。具體的說,你能夠彈道註冊表事件,文件事件,網絡事件,線程活動和性能分析事件。若是你想找出你的過程涉及哪些文件或註冊表,那麼ProcMon能夠爲你提供幫助。
ProcDump是用於保存轉儲文件的命令行工具。它能夠當即或在觸發器上生成轉儲。例如,在崩潰或掛起時建立轉儲。這是我推薦的用於捕獲轉儲的工具。如下是它的一些功能:
若要查找有關ProcDump和Dump的更多信息,請參閱個人文章:2019年若是建立、使用和調試.NET 應用程序崩潰轉儲。
Windows中有一種稱爲「性能計數器」的內置機制。這些計數器可以讓你根據計算機上發生的事情跟蹤大量有用的指標。這些多是系統範圍內的指標,也多是針對特定過程的指標。如下是一些可使用性能計數器衡量的事情的示例:
你可能會監視成千上萬種不一樣的計數器,它們會盡量的具體。例如,若是你想了解進程的內存使用狀況,則有如下計數器:私有字節,虛擬字節,工做集,私有工做集,Gen X 集合,GC時間百分比,大對象堆大小 等等。
性能監視器是使你能夠直觀地看到這些計數器的工具(儘管也有其餘工具)。它以在Windows設備預安裝上了。要運行它,只須要在開始菜單中鍵入「Performance Monitor」,或在命令提示符下鍵入perfmon
。
PerfView是一個開源通用分析工具。它能夠作不少事情,如下是其中一些:
它的分析是基於Windows事件跟蹤(ETW)事件。這是一個內置的日誌記錄系統,運行速度很是快,Windows的每一個部分均可以使用它。一切都將事件記錄到ETW,包括內核,Windows操做系統,CLR運行時,IIS,ASP.NEt框架,WPF等。
PerfView很容易成爲此列表中最複雜的工具。可是它也很是強大。要開始使用PerfView,我建議在第九頻道觀看Vance Morrison的視頻課程系統。
Fiddler是Progress Telerik的免費工具。這是我最喜歡的網絡請求調試工具之一。它被稱爲HTTP代理服務器,僅此而已。它捕獲全部HTTP請求,記錄數據,並按其方式發送請求。
對於每個請求,你均可以查看流程,Headers,payload,response,status等全部的內容。
對於調試,Fiddler具備兩個有用功能:
你可能會想知道我未說起的某些工具,若是你已經作開發很長時間了,你可能會想到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),反編譯器以及其他的工具也是如此。
祝你們調試愉快!!!
原文出處:https://www.cnblogs.com/sesametech-netcore/p/12365896.html