Qt 生成dump文件及windbg调试(进阶版)

还是简单的说一下吧,各位不了解的也可以看看本人的另一篇博客。也可以直接参考如下:
main.cpp

根据异常代码获取错误描述的函数,自定义的。

异常捕获回调函数,windows系统固定参数的,关于EXCEPTION_POINTERS 异常结果,可以查看MSDN官方文档,有详细的介绍。

里面用到了唯一性检测(只能打开一个exe程序),以及自动重启的相关代码,需要的可以参考(白嫖…)

1.安装Windbg Preview

目前已知该软件唯一安装途径好像只有微软商店,反正博主是从微软商店下载的

2.调试

先手动制造一个异常吧,就0x0000005常见的吧,内存访问冲突,或者你弄一个除0的也可以,然后会在程序当前目录的Dump文件夹下生成一个异常的mini dump文件,如下图:

异常文件:

打开刚才安装的windbg preview,设置一下符号缓存文件路径,以及你自己程序的pdb文件路径,友情提示,Qt在release模式下生成pdb文件需要在pro文件增加如下配置:

好了,继续我们的调试,配置如下

配置完成之后,将刚才生成的pdb文件拖入command窗口,然后点击自动分析:

此时会处于BUSY状态,从微软服务器下载各种符号文件,等他完成。

之后,可以看到调用堆栈信息,以及错误代码。094(除0错误),因为之前赋值为0了,==改成=了。

所以后续调用就出现除0的问题,可以直接看到红色框内,源码第61行有问题,感觉比windows自带的windbg强大太多了。

另外还有个问题,就是通过FormatMessage获取错误码对应的描述的时候,访问冲突会出现如下描述:”0x%p 指令引用了 0x%p 内存。该内存不能为 %s。\r\n”,占位符的参数是否需要通过FormatMessage的最后一个参数va_list传递进去,或者说有其他的方案,能完整显示出具体指令和内存地址,目前还没有解决,虚心请教各位大佬,不胜感激。

总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了windbg preview的使用以及异常捕获dump文件的调试。博主也是在成长中的菜鸟,文字如有错误,欢迎指正,大家共同探讨。

Original: https://www.cnblogs.com/ybqjymy/p/16550995.html
Author: 一杯清酒邀明月
Title: Qt 生成dump文件及windbg调试(进阶版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/546567/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球