一、首先在软件项目pro文件中添加:
LIBS += -lDbgHelp
二、main.cpp文件中添加
#include "mainwindow.h"
#include <QApplication>
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
#include <windows.h>
#include <signal.h>
#include <dbghelp.h>
#include <QDateTime>
#include <QDir>
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException)
{
// 在软件运行目录下创建Dump文件夹,并将dmp文件输入到该文件夹下
QDateTime dateTime = QDateTime::currentDateTime();
QString appPath = QApplication::applicationDirPath();
QString dmpDir = appPath + "/Dump";
QDir dir;
if(!dir.exists(dmpDir))
{
dir.mkdir(dmpDir);
}
QString fileName = dmpDir + "/Crash_" + dateTime.toString("yyyyMMddhhmmss") + ".dmp";
HANDLE hDumpFile = CreateFile((LPCTSTR)fileName.utf16(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
if (hDumpFile != INVALID_HANDLE_VALUE) {
// Dump信息
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
// 写入Dump文件
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, nullptr, nullptr);
CloseHandle(hDumpFile);
}
// 返回异常代码
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char *argv[])
{
// 设置异常处理函数
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
QApplication a(argc, argv);
MainWindow w;
w.show();
qDebug() << "Before crash.";
//添加崩溃
int *p = nullptr;
*p = 0;
qDebug() << "After crash.";
return a.exec();
}