Windbg 分析QT 程序中的Crash问题
开发的工具中添加了google 的breakpad 来抓取dump 文件,在出现问题的时候可以用来分析crash发生的原因。
breakpad 抓取的是min dump 文件:
分析dump 使用windbg ,我这边使用的是64位的windbg
分析dump 需要pdb 文件,如果有source code 可以加载source code的路径。
首先我们需要加载符号文件在windbg的菜单File->Symbol file path 中来设置符号文件路径
系统调用的模块设置的符号文件可以从微软的服务器下载:
SRV*D:\mysysmbol*http://msdl.microsoft.com/download/symbols
自己的exe 对应的符号文件指定到相关的路径,用分号分开:
D:\source code\QT Project\SomeipTool\release
QT 的相关模块的pdb 需要自己去下载:
找到和自己的QT开发工具对应的版本的pdb 文件然后下载下来,我的QT 是5.14.2,在下面的路径上下载相关的文件
Index of /online/qtsdkrepository/windows_x86/desktop/qt5_5142/qt.qt5.5142.win64_msvc2017_64
5.14.2-0-202003291224qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64-debug-symbols
然后添加到windbg的符号文件路径中:
D:\download\5.14.2-0-202003291224qtbase-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86_64-debug-symbols\5.14.2\msvc2017_64
其次设置一下源码的路径这样在出现问题后可以通过pdb 和源码对应上
菜单 File -> Source File Path
最后加载生成的dump 文件
菜单 File->Open Crash dump
下面是用windbg 分析问题的过程,首先我们需要确认自己的dump 和pdb 文件要对应上,否则错误的pdb会把我们带到错误的地方。
使用指令:!chksym SomeipTool
通常我们会使用指令:!analyze -v
然后用.ecxr切到异常处
从中可以看到出问题的是9号线程
输入~ 指令可以查看所有的线程
使用指令:kb 来查看函数调用栈
最后出问题的位置在函数SomeipTool!npcap::SaveAndCapture+0x123,因为加载了源码路径可以直接跳到相关的位置
查看对应的汇编指令.u
std::string str2{ dev_ }; dev_这个指针来初始化str2,指针没有赋值是个空指针。
现在问题已经查明,windbg的用法还有很多,后面会继续更新相关的内容。
杨树与晨光: 写的真好,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】,期待互关☒☒☒
CSDN-Ada助手: CS入门 技能树或许可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml
玖为: 虽然看不懂 但大受震撼
qq_42951980: 谢谢
cwei231: 这个可以自己编译出来,如果不想编译可以从源码提供的执行包中拿出来用就可以