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的用法还有很多,后面会继续更新相关的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值