概述
有时候程序长期运行以后会崩溃,这种错误往往有很隐蔽,不容易定位,如果程序在崩溃时能记录下崩溃的地址,那就能减少我们很多定位问题的时间,昨天分享了在生成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文件的方法的全部内容,希望文章能够帮你解决linux下qt程序如何产生dmp,Windows系统中让QT程序在崩溃时生成dump文件的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复