.NET高階除錯系列-Windbg除錯入門篇
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除錯擴充套件
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