.NET高階除錯系列-Windbg除錯入門篇

Eric zhou發表於2020-06-27

Windbg是.NET高階除錯領域中不可或缺的一個工具和利器,也是日常我們分析解決問題的必備。準備近期寫2篇精華文章,集中給大家分享一下如果通過Windbg進行.NET高階除錯。

今天我們來一篇入門的文章。首先,Windbg是什麼?

Windows Debugger,簡稱WinDbg,.NET 最強分析除錯利器。它可以用來:

  • 除錯核心模式和使用者模式程式碼
  • 分析Crash dump
  • 分析程式碼執行時 CPU 暫存器資訊

我們可以通過WinDbg除錯以下具體問題:

  • 執行緒阻塞
  • 記憶體洩露
  • 分析查詢執行時執行緒堆疊和變數
  • 分析程式Crash原因
  • 分析消耗CPU原因
  • 檢視並除錯CLR異常

那麼,首先我們先進行Windbg下載安裝、配置。

一、下載安裝WinDbg,配置除錯環境

1. 推薦下載連結

https://raw.githubusercontent.com/EasyDarwin/Tools/master/Windbg_x86_x64/dbg_amd64.msi

或者從Windows Store下載 WingDbg Preview版本

下載後一步一步安裝即可

 2. 配置除錯符號

大家會問一個問題:為什麼要配置除錯符號?

若要使用 WinDbg 提供的所有高階功能,必須載入適當的符號:比如說我們可以除錯、檢視.NET CLR程式堆疊,此時要載入對應的除錯符號。

 微軟提供了統一的除錯服務伺服器地址:

http://msdl.microsoft.com/download/symbols,將這個地址提供的除錯符號,下載快取到本地,Windbg除錯的時候可以用上。
srv*c:\symcache*http://msdl.microsoft.com/download/symbols;c:\symcache

  

3. 下載並使用WinDbg偵錯程式擴充套件

 Windbg偵錯程式擴充套件是Windbg除錯的精華和核心,可以這麼說,掌握各類Windbg偵錯程式擴充套件,你就掌握了各類除錯技能。

 預設情況下,WinDbg的除錯指令是有限的,通過一些WinDbg偵錯程式擴充套件,可以方便我們進行.NET 程式除錯

 SOS除錯擴充套件 : 隨著.NET Framework安裝,可以直接載入:  .load sos clr

 SOS這個dll在哪裡呢(分32位和64位)?

 4.0, 32-bit –> C:\Windows\Microsoft.NET\Framework\v4.0.30319
 4.0, 64-bit –> C:\Windows\Microsoft.NET\Framework64\v4.0.30319

  MEX除錯擴充套件:This extension is widely used by Microsoft Support Engineers in troubleshooting process applications

 下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=53304

 下載完成後,將32/64位的Mex.dll 拷貝到windbg安裝目錄中

 例如:C:\Program Files\Debugging Tools for Windows (x64)\Mex.dll

 詳細使用說明:https://github.com/REhints/WinDbg/tree/master/MEX

 下載、安裝、配置完成Windbg之後,接下來我們瞭解一下一些基本的除錯命令。

二、基本的WinDbg除錯指令

1. WinDbg自帶的除錯指令

 

   

    更多指令,可以檢視一下連結:

    https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg

 2. SOS除錯擴充套件常用的除錯指令

   

    

    

 

  

  

  

  

 

  

   3. Mex除錯擴充套件常用的除錯指令

   

     

    

    

    

    

     更多Mex除錯指令,可以檢視連結:https://github.com/REhints/WinDbg/tree/master/MEX

 

  以上是整個Windbg除錯入門篇的介紹,希望大家能夠掌握,下一篇我們將通過一些具體的案例,示意各個指令的使用場景。

 

周國慶

2020/6/27

 

相關文章