- 本文转自: https://blog.youkuaiyun.com/bigger_belief/article/details/124476879?spm=1001.2014.3001.5506
- C++ 程序有时候会发生异常导致卡顿或者崩溃,dump可以捕捉发生的异常
- 调试工具 Windbg 可以通过腾讯电脑管家进行下载
目录
(3) 输入!analyze -v, 查看数据(会出现异常分析的数据,栈的信息)
1、工具:用Windows自带的windbg,在调试工具中
2、主要目的:使用dump文件查找崩溃的位置
3、具体步骤:
(1)首先打开dump文件。
(2)加载pbd文件的路径:
注意:这个pbd的路径是个人的,看准你自己的pbd路径
(3) 输入!analyze -v, 查看数据(会出现异常分析的数据,栈的信息)
出现异常:
FAILURE_BUCKET_ID: INVALID_POINTER_READ_c0000005_Qt5Core.dll!QObjectPrivate::_QObjectPrivate
要是没有出现明显的异常信息,可以继续操作:
(4)输入~*kbn 查看所有的线程
复制第三个参数00b8d9d0
输入 dd 00b8d9d0
输入 dd 00b8d9d0
然后输入 .exr 00b8db60(第二个参数)查看上下文 .cxr 00b8dbb0 (第三个参数)
.exr 00b8db60(第二个参数)查看上下文 .cxr 00b8dbb0 (第三个参数)
然后kbn
kbn
然后发现自己熟悉代码
双击崩溃位置,发现跳不过去
(5)打开call stack
打开call stack
双击崩溃的位置
成功跳转代码
(6)打开local
查看崩溃前的数据
查看崩溃前的数据
这里就可以找到错误的位置以及出问题的原因了。
(7)调试程序:
由于某些情况下,pdb与现在版本不一致(vs中修改了些的代码,或者vs抽风)vs无法附加进程,但是bug又是偶现的,好不容易出现一次又不能破坏现场。就可以直接使用windbg直接附加到进程进行调试程序。
附加到进程
此时程序会暂停
打开cpp文件
点击上面的小图标,可以打开调用堆栈等窗口。
选中你需要调试的代码F9添加断点,跟vs一致。
添加断点
F5或者输入g 继续运行
断点停止成功
可以看到当前运行的数据都可以看到了。