linux下qt程序如何产生dmp,Windows系统中让QT程序在崩溃时生成dump文件的方法

有时候程序长期运行以后会崩溃,这种错误往往有很隐蔽,不容易定位,如果程序在崩溃时能记录下崩溃的地址,那就能减少我们很多定位问题的时间,昨天分享了在生成MAP文件的方法,今天再来分享一下Windows系统中让QT程序在崩溃时生成dump文件的方法。

什么是Dump文件?有什么作用?

Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到Dump文件中。Dump文件必须用专用工具软件打开,比如WinDbg。

实现方法

1、将下面的代码复制粘贴到main.cpp中。#if defined(Q_OS_WIN32)

#include

#include

#pragma comment(lib, "Dbghelp.lib")

long __stdcall CrashInfocallback(_EXCEPTION_POINTERS *pexcp){

//创建 Dump 文件

HANDLE hDumpFile = ::CreateFile(

L"Demo.DMP", //输出的dump文件的名称

GENERIC_WRITE,

0,

NULL,

CREATE_ALWAYS,

FILE_ATTRIBUTE_NORMAL,

NULL);

if (hDumpFile != INVALID_HANDLE_VALUE)

{

//Dump信息

MINIDUMP_EXCEPTION_INFORMATION dumpInfo;

dumpInfo.ExceptionPointers = pexcp;

dumpInfo.ThreadId = GetCurrentThreadId();

dumpInfo.ClientPointers = TRUE;

//写入Dump文件内容

::MiniDumpWriteDump(

GetCurrentProcess(),

GetCurrentProcessId(),

hDumpFile,

MiniDumpNormal,

&dumpInfo,

NULL,

NULL);

}

return 0;

}

#endif

2、添加下面代码,可执行程序在main函数第一行添加,dll在初始化函数或者最先执行的函数中添加。#if defined(Q_OS_WIN32)

::SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashInfocallback);

#endif

3、dump文件需要和pdb文件一起配合使用,所以release版本的程序还要在在pro中添加下面代码以生成调试信息,debug版本可跳过此步。QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO

QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

4、程序崩溃时会在执行程序的同级目录下生成DMP文件,将DMP文件和pdb文件拷贝到代码工程的release目录下,双击DMP文件,VS会自动打开,然后点击右侧的使用仅限本机进行调试,就会定位到代码出错的地方。具体Dump文件调试方法请参照其他文章。

来源地址:https://www.toutiao.com/i6920183040132055564/

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值