目录

1.简介

2.开发环境

3.生成dump文件

3.1修改注册表(方式1)

3.2修改注册表(方式2)

3.3修改代码,设置回调函数(方式3)

4.修改pro文件

5.生成pdb

5.1下载cv2pdb工具

5.2使用cv2pdb工具生成pdb文件

6.Windbg调试dmp

6.1设置

6.2解析dmp文件


1.简介

崩溃转储时在软件崩溃时,把堆栈信息保存到日志,便于定位崩溃位置(未深入研究,这是我自己的理解)

2.开发环境

Win10,QtCreator4.10.0,Qt5.12.5,MinGW7.3.0(Qt、QtCreator、MinGW是Qt5.12.5安装包自带的),VS2015(编译器是MinGW,VS2015仅作为步骤5中pdb转换工具的运行环境)

3.生成dump文件

3.1修改注册表(方式1)

注册表定位到以下节点:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug

增加三个注册表项(如果不存在这三项)

Auto:1开始  0停止
Debugger:"D:\Windows Kits\10\Debuggers\x64\windbg.exe"是调用产生dump的程序可以用windbg也可以用vs自带的调试工具C:\Windows\System32\vsjitdebugger.exe".dump -ma D:\dumpWindbg\CrashDump.dmp"这句是使用windbg产生dmp的命令
图中数据("D:\Windows Kits\10\Debuggers\x64\windbg.exe" -p %ld –c ".dump -ma D:\dumpWindbg\CrashDump.dmp" -e %ld –g)(默认值:"D:\software\windbg\install\windbg.exe" -p %ld -e %ld)---直接启动WinDbg调试UserDebuggerHotKey:快捷键创建BreakPoint,详见https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc939487(v=technet.10)

注:我用的方式2,所以这个没法截图,与方式2操作方法相同。

3.2修改注册表(方式2)

注册表定位到以下节点:\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps

增加三个注册表项(如果不存在这三项)

DumpCount:文件数量
DumpFolder:存储位置
DumpType:dmp文件类型 0:custom 1:mini 2:full

方式1和方式2对比说明(该段摘抄自网络):
通过实际测试(win10 环境)方式 1 和方式 2 互斥:也就是说两个方式同存时只有一个生效
关闭方式 1 只需将 Auto 数值改为 0,关闭方式 2 只需将数量 DumpCount 改为 0
方式 1 和 2 都不需要写代码,比较方便。
方式 1 文件名自己用 windbg 命令(我还不熟悉,只写了这个,后续知道了增加一个可变的名字)
方式 2 文件名会以程序名加进程号出现(应用程序名称全称。进程号.dmp)

1.未进行任何修改,也会在C:\Users\XXX\AppData\Local\CrashDumps目录下生成dmp文件,但是不清楚该默认dmp文件的生成参数,如DumpType参数,该dmp文件与修改注册表后生成的dmp文件有什么区别,没深入研究,可自行尝试。

2.如果项目使用了EasyLoggging++,需要在pro文件中取消EL对错误的捕捉,把下面这一行注释掉

ELPP_FEATURE_ALL \

3.3修改代码,设置回调函数(方式3)

这部分我就不写了,因为网上试了三四种代码实现的方式,都没有成功生成dmp文件,最终用的方式2

贴几个网上的实现代码(不保证成功,反正我没成功):

qt mingw 创建dump 并查找crash 出错行_学之知之的博客-CSDN博客(这个网址的方法在pro文件中少加了LIBS += -lDbgHelp)

使用QTCreator编程时,如何利用dmp文件定位程序奔溃_thequitesunshine007的博客-CSDN博客

4.修改pro文件

如果在步骤3中使用的是修改代码的方式,则已经修改了pro文件,可跳过步骤4。

如果在步骤3中使用的是修改注册表的方式,就需要在pro文件中加入以下内容,目的是在release版本中加入调试信息:

CONFIG +=debug_and_release
CONFIG(release,debug|release){
QMAKE_LFLAGS_RELEASE += /MAP /INCREMENTAL:NO /DEBUG /opt:ref
QMAKE_CFLAGS_RELEASE += -O2 -MD /Zi
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
}
#只在release使用,否则如果使用了其他错误捕捉的库,编译时会提示错误捕捉重定义

:修改pro文件后,需要清理项目,重新构建

5.生成pdb

使用Windbg调试dmp文件需要设置符号路径,如果只设置了微软符号服务器的内容,则解析dmp文件时无法定位到具体崩溃的代码所在行,因此还需要设置工程的符号路径,生成工程符号文件的过程如下:

5.1下载cv2pdb工具

下载链接:

项目网址:https://github.com/rainers/cv2pdb(页面右侧有最新的release版本下载链接,github页面改版不负责修改)

V0.38下载链接(点击该链接可直接下载):https://ci.appveyor.com/api/projects/rainers/visuald/artifacts/cv2pdb.exe?job=Environment%3A%20os%3DVisual%20Studio%202015%2C%20VS%3D14%2C%20APPVEYOR_BUILD_WORKER_IMAGE%3DVisual%20Studio%202015

如果无法访问GitHub,可在这下载:exe生成pdb符号文件工具-桌面系统文档类资源-CSDN下载

5.2使用cv2pdb工具生成pdb文件

使用该版本(V0.38)工具需VS2015环境,具体需要哪个组件未深入研究,我直接装的VS2015(安装的组件,只选了编程语言 - Visual C++,而且未勾选XP支持,因为我不需要开发XP兼容的程序)

cmd或powershell运行以下命令,即可生成pdb

cv2pdb debugger.exe

6.Windbg调试dmp

可以用Windbg或VS,网上还有用QtCreator调试的方法,不过我没有试成功,我用的是Windbg。

QtCreator调试dmp(可自行尝试,我用这种方法说dmp文件格式不对):Qt生成dump文件——release版_小黑屋1024的博客-CSDN博客_dump文件 qt

VS调试dmp可自行搜索,网上教程很多,以下为Windbg调试dmp过程

6.1设置

符号路径:把步骤5生成的pdb文件所在目录及微软符号服务器加进去,使用说明见:Windows 调试器的符号路径 - Windows drivers | Microsoft Docs

源文件路径:源代码文件夹

可执行文件路径:可执行文件路径(这个选择具体的exe文件报错,只能选exe文件所在文件夹)

:这三种路径设置,每个串口点击OK后会在主窗口中显示参数设置状态,如果有问题会报Error,可根据提示进行修改

6.2解析dmp文件

Windbg,File - Open Crash Dump,选择dmp文件打开,执行命令

!analyze -v

进行dmp文件解析,可参考:

windbg分析崩溃dmp_snowings555的博客-CSDN博客_windbg分析崩溃

windbg使用超详细教程(我是新手,大佬轻虐) - 知乎

参考:

如何使QT的Release模式可调试(Windows)_itas109的专栏-CSDN博客_qt release进行调试(pro文件中的参数介绍)

windows程序异常产生dump文件(两种注册表和写代码三种方式实现)_hhl_work的博客-CSDN博客_dump文件 注册表(生成dmp文件的三种方式)

windows appcrash 注册表配置 dump生成_编程拾掇-CSDN博客(使用VS和Windbg调试dmp文件的过程介绍)

Qt 利用 dmp 文件进行调试_..-CSDN博客(使用了EasyLogging++要取消el的错误捕捉)

Windows下使用Windbg处理Qt崩溃转储dmp相关推荐

  1. Windows下生成dump文件的三种方式

    文章目录 前言 一.什么是dump文件? 概述 dump分类 内核模式Dump 用户模式Dump 二.dump生成方式 实现方法 方法一:修改注册表 参数说明 方法二:生动创建转储文件 方法三:通过代 ...

  2. windows崩溃转储文件

        在默认情况下,所有的Windows系统都被设置为:当系统崩溃时,系统总是试图记录下有关当前系统的状态的信息.你可以通过用户界面看到这些设置,做法是,打开控制面板中的System工具,然后在Sy ...

  3. Google Breakpad 在 windows下捕获程序崩溃报告

    一.简述 Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,支持Linux.mac.solaris.windows. 通俗一点来讲,我们可以借助Google breakpad来 ...

  4. Windows平台崩溃转储系统crashrpt的使用

    概述 CrashRpt 是一个免费的.轻量级的开源错误报告库开源库,旨在拦截C++程序中的异常,收集有关崩溃的技术信息并通过互联网向软件供应商发送错误报告,用于在 Microsoft Visual S ...

  5. Windows下Qt程序打包

    Windows下Qt程序打包 将windeployqt.exe 目录添加到系统环境变量 windeployqt.exe目录如下: 命令行打包 1.打开命令行 2.执行打包命令 windeployqt ...

  6. Qt 程序在 Windows 下的发布

    「博客搬家」 原地址: CSDN 原发表时间: 2016-06-04 本文讨论在 Windows 平台下编译成功的 Qt 程序,如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法. ...

  7. 在Windows下搭QT编程环境

    因为工作需要,要用到QT做UI,今天周末我决定来公司将QT环境搭起来. 在之前网上找了很多别人的经验,大概了解了在Windows下拾建的步骤: 1. 要有VS2005的工具,当然我机子上本来就有VS2 ...

  8. QT + OpenCV + MinGW 在windows下配置开发环境

           由于研究项目需要,最近开始接触C++界面设计,关于"QT + OpenCV + MinGW在windows下配置开发环境"着实让人头疼,单次配置时间相当长,也十分不容 ...

  9. Linux 下重新编译Windows下生成的Qt工程

    原址:https://blog.csdn.net/Fanpei_moukoy/article/details/21613703 以下内容亲测通过 其实qt才是真正的跨平台,java简直太搞笑了,假跨平 ...

最新文章

  1. [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
  2. ASP.NET 2.0中CSS失效解决方案
  3. 008_CSS属性选择器
  4. 博客搜索引擎索引博文数量分析与评估
  5. 三阶魔方魔方公式_观看此魔方的自我解决
  6. 配置linux系统自带apache+php+mysql
  7. 项目经理常见的沟通坏习惯
  8. 微软发布 Azure 物联网安全中心;阿里巴巴在美申请专利,以实现跨区块链统一管理;Google利用足球训练下一代人工智能……...
  9. QScrollArea 详解
  10. 自然语言处理系列-1.什么是NLP?
  11. Android Fragment-APP调用其他APP中的Fragment 1
  12. J-Octa 使用MD和MO/DFT计算相对介电常数
  13. q讯家园看加密空间 官方免费版
  14. 5款Windows系统下的桌面管理软件
  15. 17个改变世界的数学公式!
  16. openerp 打印报表pdf中文乱码解决办法
  17. 104届广交会秋交会展位(摊位)联营参展函 (广交会展位合作)
  18. 教你如何写好一篇专利申请?
  19. android qq底部菜单栏,怎么关闭手机QQ底部导航栏的“看点”?
  20. 分布式与集群的区别?

热门文章

  1. 利用结巴和WordCloud进行中文分词及图云绘制入门
  2. 我的苦难,我的大学 [读书笔记]
  3. 老交大的人才队伍建设
  4. 设置Ubuntu-18息屏时间
  5. 谈谈android的类xp Ghost时代
  6. 抽丝剥茧C语言(中阶)操作符+练习
  7. puzzle(0712)Lazors、折射之光
  8. 最新MFC抢MBI回馈积分双机方案(有效提升帐号安全)
  9. 人脸识别---排序测度特征(Ordinal Measures)
  10. 个人博客作业Week3--必应词典案例分析