WinDbg:入门分析 dmp 文件『一』

简 述: 初次在 Win 10 使用 WinDbg 分析 .dmp 文件,定位和分析原因,作为基础入门教程帮助后来者。


本文初发于 “偕臧的小站”,同步转载于此。


关联

附相关目录,随着后续使用更新

  1. WinDbg:入门分析 dmp 文件『一』
  2. WinDbg:调试之附加进程生成 dmp『二』

背景

此前未曾接触过 WinDbg ,亦未曾分析过 dmp 。现如今上手数月后,回头来写一下此工具在 Win 10 下的基本用法;希望帮助后来者先入个门。大道漫漫兮~,道阻且长;


正文

介绍

『.dmp』 是存储着软件运行崩溃时刻的一些 “场景” 和调试符号的文件;可看作崩溃原因的 “场景再现”。

『WinDbg』 是一款分析 dmp 崩溃文件的开源工具,功能很强,由 Microsoft 出品 官网

  • WinDbg Preview 可直接在 Microsoft Store 中下载;
  • WinDbg 正式版在集成在 windows-sdk 中,可选为仅安装 Windbg;

使用

使用 WinDbg 分析崩溃场景,需要信息。下载版本建议和你的周围同事保持一致,不懂方便请教,毕竟界面略有差异。

  1. .dmp 文件,简中译名 “转储文件”
  2. .pdb 符号文件
  3. 源码 [可选];高阶用法,暂不展开

步骤

暂时记住 WinDbg x86 来调试 x86 应用程序;使用 WinDbg x64 来调试 x64 应用程序;(虽然可以 x64 调试 x86 应用程序,但需要一些命令设置一番)。

命令在底部输入框输入,可依次执行命令如下,也可以直接在界面点击蓝色命令,省略手动输入命令。


开始调试,依次执行命令如下:

!analyze -v   					// 分析
.ecxr         					// 查看当前异常的上下文信息、和部分寄存器信息
			  lmvm "模块名"  	  // 下载对应 .pdb
kb            					// 显示堆栈崩溃,具体到行

详细例子
  1. File-Symbol File Path 输入符号路径窗口;可以随便输入一个路径,这里我输入 .dmp 的存放路径 D:\dmp因若默认为空,后面 WinDbg 加载 .dmp 文件后会长时间无响应, 只有资源管理器杀死重开。


  2. File - Open Crash Dump 选中当前 .dmp 打开


  3. 执行如下命令 !analyze -v 开始分析,稍等片刻,有时此过程很慢,标志是左下角会显示 BUSY! 繁忙提示

  4. 执行 .ecxr 查看的相关信息,查看当前异常的上下文信息、和部分寄存器信息

  5. 执行后,可以看到崩溃堆栈打印的 dll 模块名为 cloudservice ;执行 lmvm cloudservice 获取此 dll 的详细信息,按照时间去 Jenkins 构建上,下载与此时间最近的 .dll 同时生成的 cloudservice.pdb 符号文件;

  6. 将刚找到的 cloudservice.pdb 文件放入刚才的 D:\dmp 路径下;重新打开 1 步骤窗口,这次勾选左下角 Reload 重新加载。再按上面命令顺序来一遍,依次执行

    !analyze -v   // 分析
    .ecxr         // 查看寄存器和模块信息
    kb            // 查看崩溃堆栈
    

信息如图,定位到了具体行,那么就去 VS 里面修改代码。


总结

若是当前代码的版本恢复到和 WinDbg 提示的 dll 版本一致(可通过 Jenkins 查看编译时间和提交的哈希确定),则基本是准的。若是代码版本领先于 dll 版本,那么也有具体崩溃的函数,崩溃位置也是在提示行数附近偏移一点。

其实在 6 步骤中,还可以点击前面的序号,查看崩溃此函数时,里面的一些局部变量的信息。


附上几个常见崩溃的原因:

  • 指针为空,需校验 (90%)
  • 存在多线程并发,需要使用原子或锁 (5%)
  • 使用 STL 的游标中迭代器失效,遍历过程中删除元素了
  • 内存泄漏 / 不足

系列地址

QtExamples

欢迎 star ⭐ 和 fork 🍴这个系列的 C++ / QT / DTK 学习,附学习由浅入深的目录。

要使用WinDbg Preview分析dmp文件,你可以在Microsoft Store中下载并安装WinDbg Preview应用程序\[1\]。安装Windows SDK时,也可以选择只安装WinDbg这个组件\[2\]。以下是简单分析dmp文件的步骤: 1)打开WinDbg Preview应用程序。 2)通过菜单“File”->“Open Crash Dump”打开dmp文件。 3)文件打开后,WinDbg Preview会列出产生dump文件的设备的系统版本和运行时间等相关信息\[2\]。 请注意,使用WinDbg Preview分析dmp文件可能需要些基本的调试知识和经验。如果你在使用过程中遇到问题,建议与你周围的同事交流并请教,因为不同版本的WinDbg界面可能略有差异\[3\]。 #### 引用[.reference_title] - *1* *3* [WinDbg入门分析 dmp 文件』](https://blog.csdn.net/qq_33154343/article/details/123563647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用WinDbg分析Windows dump文件方法](https://blog.csdn.net/jetliu05/article/details/122467974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偕臧x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值