参考链接:https://blog.csdn.net/u014552102/article/details/82026592
Qt5.9.1 MSVC2015 Demo下载链接:链接:https://pan.baidu.com/s/1-ST0NRZVmIB7kyKeAt83Og 提取码:ghmk
链接二:
Qt 发布的release项目需要在pro文件中添加,这样才带有调试信息
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
需要添加的头文件主要有:
#include
#include
Pro文件中需要添加的LIB有:
LIBS += -lDbghelp
LIBS += -luser32
程序crash触发回掉函数:
#include "mainwindow.h"
#include
#include
#include
#include
long __stdcall CrashInfocallback(_EXCEPTION_POINTERS *pexcp)
{
//创建 Dump 文件
QString FileName__ = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss") + ".DMP"; //以crash时间 命名
HANDLE hDumpFile = ::CreateFile(
FileName__.toStdWString().c_str(),
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;
}
main.cpp:
#include "mainwindow.h"
#include
#include
#include
#include
long __stdcall CrashInfocallback(_EXCEPTION_POINTERS *pexcp)
{
//创建 Dump 文件
QString FileName__ = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss") + ".DMP"; //以crash时间 命名
HANDLE hDumpFile = ::CreateFile(
FileName__.toStdWString().c_str(),
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;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
::SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)CrashInfocallback);
MainWindow w;
w.show();
return a.exec();
}
非常感谢前辈们!