Qt的mingw版本崩溃相关
msvc版本的Qt在崩溃时,会自动生成dmp文件,而mingw版本则不会,因此需要手动配置,同时最重要的是msvc具有pdb,这样既能保证c++的符号信息,又能保证崩溃时能定位到源码,于是想mingw版本肯定也可以,但是经过一番尝试,发现mingw版本生成的dmp文件中,符号信息是缺失的,因此无法定位到源码,因此只能定位到函数名,因此还是需要手动配置,以下是配置方法
效果图
前置条件
使用breakpad来获取崩溃信息参加我以前的文章 崩溃收集
存在问题
release版本崩溃时,生成的dmp文件中,符号信息是缺失的, 如添加调试信息,基本上等同于开源代码(可能你还不知道debug版本的威力)
1 | #使用下面这三句或底下三句可以在release下保留调试信息 |
核心步骤
执行 objcopy 分离 debug信息
1
objcopy --only-keep-debug 目标.exe 调试信息.mypdb
执行 strip 去掉调试信息
1
strip --strip-debug --strip-unneeded 目标.exe
执行 objcopy 将 debug文件名回填
1 | objcopy --add-gnu-debuglink=调试信息.mypdb 目标.exe |
加密调试信息
将 ‘调试信息.mypdb’ 文件加密压缩后生成 ‘加密调试信息.mypdb’这里的加密算法可以自行设定打包发布
将 ‘加密调试信息.mypdb’ 和 ‘目标.exe’ 打包发布,这样在崩溃时,就可以获取到崩溃信息了,只需要保存好对应版本的’加密调试信息.mypdb’甚至该文件不提供
使用
- 解密
对 ‘加密调试信息.mypdb’ 文件进行解密得到 ‘调试信息.mypdb’ - 崩溃收集
将 ‘调试信息.mypdb’ 和 ‘目标.exe’以及 收集到的 *.dmp的崩溃信息一起放到一个文件夹中 - 获取崩溃点
运行minidump_stackwalk.exe,addr2line.exe等获取崩溃代码行
参考文献
赏
支付宝打赏
微信打赏


您的支持是我前行的动力!