.NET高級調試系列-Windbg調試入門篇
- 2020 年 6 月 27 日
- 筆記
- .NET Framework, .NET Research, windbg, Windbg調試
Windbg是.NET高級調試領域中不可或缺的一個工具和利器,也是日常我們分析解決問題的必備。準備近期寫2篇精華文章,集中給大家分享一下如果通過Windbg進行.NET高級調試。
今天我們來一篇入門的文章。首先,Windbg是什麼?
Windows Debugger,簡稱WinDbg,.NET 最強分析調試利器。它可以用來:
- 調試內核模式和用戶模式代碼
- 分析Crash dump
- 分析代碼執行時 CPU 寄存器信息
我們可以通過WinDbg調試以下具體問題:
- 線程阻塞
- 內存泄露
- 分析查詢運行時線程堆棧和變量
- 分析進程Crash原因
- 分析消耗CPU原因
- 查看並調試CLR異常
- …
那麼,首先我們先進行Windbg下載安裝、配置。
一、下載安裝WinDbg,配置調試環境
1. 推薦下載鏈接
//raw.githubusercontent.com/EasyDarwin/Tools/master/Windbg_x86_x64/dbg_amd64.msi
或者從Windows Store下載 WingDbg Preview版本
下載後一步一步安裝即可
2. 配置調試符號
大家會問一個問題:為什麼要配置調試符號?
若要使用 WinDbg 提供的所有高級功能,必須加載適當的符號:比如說我們可以調試、查看.NET CLR程序堆棧,此時要加載對應的調試符號。
微軟提供了統一的調試服務服務器地址:
//msdl.microsoft.com/download/symbols,將這個地址提供的調試符號,下載緩存到本地,Windbg調試的時候可以用上。
srv*c:\symcache*//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
下載地址://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
詳細使用說明://github.com/REhints/WinDbg/tree/master/MEX
下載、安裝、配置完成Windbg之後,接下來我們了解一下一些基本的調試命令。
二、基本的WinDbg調試指令
1. WinDbg自帶的調試指令
更多指令,可以查看一下鏈接:
//docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg
2. SOS調試擴展常用的調試指令
3. Mex調試擴展常用的調試指令
更多Mex調試指令,可以查看鏈接://github.com/REhints/WinDbg/tree/master/MEX
以上是整個Windbg調試入門篇的介紹,希望大家能夠掌握,下一篇我們將通過一些具體的案例,示意各個指令的使用場景。
周國慶
2020/6/27