由于项目需要,解决软件闪退的问题,很多时候,找出引发软件闪退崩溃的现场是十分困难的,因同时发现windbg抓取dump文件比较好处理,这里简要介绍一下windbg抓取流程

1.安装windbg

建议安装一下window sdk的整个软件包,网上一些单个windbg资源容易导致版本与符号文件版本不兼容的问题

2.打开dump文件

file目录下,点开有一个open crash dump,选中自己的dump文件

dump文件写入手机nfc dump读取软件_c++

dump文件写入手机nfc dump读取软件_服务器_02

这样便是打开成功了 

 3.设置符号路径

.sympath + " 你的符号路径 "

dump文件写入手机nfc dump读取软件_经验分享_03

添加路径成功之后如图所示,注意的是,需要提前把pdb符号文件放在该dump文件夹下面 ,如果没用放的话,需要自己重新添加一下路径。

如果是release版本的,需要在原软件的输出目录下,将pdb文件拷贝过来(因为符号文件需要和引起软件异常的exe程序是一致的)一般dump文件晚于pdb文件,因为release发布exe程序时生成pdb符号文件,而dump文件是在运行且崩溃的时候才发生

4.加载符号

.reload

dump文件写入手机nfc dump读取软件_windows_04

 5.查找当前异常的上下文信息

.ecxr

dump文件写入手机nfc dump读取软件_经验分享_05

 执行.ecxr指令之后,会查找到异常的上下文,并且显示出主要寄存器的值

6.调用堆栈信息

kp

利用kp指令显示堆栈跟踪,一般符号文件无缺漏的话,会定位到程序的代码错误位置。相同指令还包括kb,kv等等

dump文件写入手机nfc dump读取软件_dump文件写入手机nfc_06

以上信息就可以查看到错误发生的位置,也可以使用!analyze -v查看异常的类型

!analyze -v

 7.如果堆栈信息没有陷入到程序具体位置,那很有可能是你的pbd符号文件没有成功加载,可以使用lml查看符号的信息,包括符号路径。

如果加载失败,可以新建一个文件夹,将pdb文件放入其中并在windbg中加入symbol path路径当中,再重复以上操作定位异常信息即可。