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/

你可能感兴趣的:(linux下qt程序如何产生dmp,Windows系统中让QT程序在崩溃时生成dump文件的方法)