使用 WinDbg 启动程序并捕获崩溃转储的完整流程
1. 启动 WinDbg 并配置符号路径
首先打开 WinDbg,配置符号服务器以便获取调试符号:
.symfix // 设置默认微软符号服务器 .sympath+ C:\MySymbols // 添加自定义符号路径 .reload // 重新加载符号
2. 启动目标应用程序
方法1:直接通过 WinDbg 启动
File → Open Executable... 或 Ctrl+E
选择你的可执行文件,WinDbg 会立即启动该程序。
方法2:使用命令行启动
windbg.exe -o "C:\Path\To\YourApp.exe" [参数]
3. 设置崩溃时自动捕获转储
在程序运行前设置自动转储捕获:
.symopt+0x40 // 启用延迟符号加载 .dump /ma C:\dumps\crash.dmp // 设置转储路径(但此时不会执行)
更推荐设置崩溃时自动执行的命令:
.events // 查看当前事件过滤器 sxe -c ".dump /ma C:\dumps\crash.dmp; q" av // 访问冲突时捕获转储并退出 g // 开始运行程序
4. 程序崩溃时的处理
当程序崩溃时,WinDbg 会自动中断,此时:
手动创建转储文件(如果未设置自动捕获)
.dump /ma C:\dumps\crash_manual.dmp
分析崩溃点
!analyze -v // 自动分析崩溃原因 kb // 查看调用堆栈
5. 高级转储选项
创建完整转储(推荐)
.dump /ma C:\dumps\full_crash.dmp
/ma
选项表示创建包含完整内存、句柄和线程信息的转储。
创建小型转储
.dump /m C:\dumps\mini_crash.dmp
6. 转储后分析
捕获转储后,可以重新用 WinDbg 分析:
windbg.exe -z C:\dumps\crash.dmp
注意事项
-
确保有足够的磁盘空间存放转储文件(完整转储可能很大)
-
对于服务程序,可能需要附加(attach)而不是直接启动
-
转储路径需要有写入权限
-
对于.NET应用程序,考虑加载SOS扩展进行更深入分析