WinDbg分析
一、基础安装与配置
1. 安装 WinDbg
-
从 Microsoft Store 安装最新版 WinDbg Preview
-
或下载独立版本:Windows SDK
2. 配置符号路径(关键步骤!)
.sympath SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols .cache * C:\SymbolCache .reload
添加应用程序符号:
.sympath+ C:\YourApp\PDB
二、加载 Dump 文件
-
图形界面操作:
-
打开 WinDbg → File → Open Crash Dump
-
选择你的 .dmp 文件
-
-
命令行操作:
windbg.exe -z "C:\dumps\crash.dmp"
三、基本分析命令
| 命令 | 功能 | 示例 |
|---|---|---|
!analyze -v |
自动分析崩溃原因 | !analyze -v |
k |
显示当前线程调用栈 | k |
~ |
列出所有线程 | ~ |
~ns |
切换到指定线程 | ~2s |
.dump |
创建新转储文件 | .dump /ma C:\new.dmp |
lm |
列出加载的模块 | lm |
!runaway |
查看线程运行时间 | !runaway |
四、崩溃分析流程
1. 自动分析崩溃
!analyze -v
查看输出中的:
-
FAULTING_IP:崩溃指令地址
-
EXCEPTION_CODE:异常类型
-
STACK_TEXT:崩溃调用栈
2. 手动分析调用栈
# 查看所有线程 ~ # 切换到崩溃线程(通常!analyze会提示) ~0s # 显示详细调用栈 kv
五、高级调试技巧
1. 内存分析
# 查看内存内容 dc 00007ff6`3fa91000 # 搜索内存中的字符串 s -a 0 L?80000000 "password" # 检查堆损坏 !heap -s
2. 句柄泄漏检测
# 列出所有句柄类型计数 !htrace -enable !htrace -snapshot !htrace -diff
3. 死锁分析
# 检查关键段 !locks # 分析线程等待链 !wow64exts.sw
4. .NET 应用程序调试
# 加载SOS扩展 .loadby sos coreclr # .NET Core .loadby sos mscorwks # .NET Framework # 常用命令 !dumpheap -stat !threads !dumpobject <address>
六、常用扩展命令
| 扩展 | 命令 | 功能 |
|---|---|---|
| SOS | !dumpheap -stat |
统计托管堆对象 |
| SOSEX | !dlk |
检测死锁 |
| MEX | !mex.us |
增强栈显示 |
| Time Travel Debugging | !tt |
时间旅行调试 |
安装扩展:
.load C:\Path\To\sosex.dll
七、自动化分析脚本
创建分析脚本 analyze.wds:
.logopen C:\logs\analysis.txt !analyze -v ~*e !clrstack !dumpheap -stat .logclose
执行脚本:
$$>a< "C:\scripts\analyze.wds"
八、实用功能
1. 时间旅行调试(TTD)
# 记录进程 tttracer -out C:\trace C:\app.exe # 回放分析 windbg -k ttd:replay:C:\trace
2. 远程调试
# 服务器端 dbgsrv -t tcp:port=1234 # 客户端 windbg -premote tcp:server=192.168.1.100,port=1234
3. 内存转储比较
# 加载两个dump .cmpload C:\dump1.dmp, C:\dump2.dmp # 比较内存 .cmpmem 00007ff6`3fa91000 L1000
浙公网安备 33010602011771号