dump.h
#ifndef MDUMP1_H
#define MDUMP1_H
#pragma once
#include <iostream>
#include <string>
#include <QApplication>
#include <QString>
#include <QDir>
#include <QDateTime>
#if defined(Q_OS_WIN32) // Q_OS_WIN32
#include <windows.h>
#endif
namespace ysm{
class Debug {
public:
#if defined(Q_OS_WIN32) // #if defined(_MSC_VER) && _MSC_VER >= 1400
// 奔溃回调
static LONG WINAPI crashStackCallback(struct _EXCEPTION_POINTERS* exceptionInfo);
#endif
};
}
#endif // MDUMP_H
dump.cpp
#include "mdump.h"
#include <QApplication>
#include <QString>
#include <QDir>
#include <QDateTime>
#if defined(Q_OS_WIN32) // Q_OS_WIN32
#include <Dbghelp.h>
//#pragma comment(lib, "Dbghelp.lib")
#endif
#include <QDebug>
namespace ysm {
#if defined(Q_OS_WIN32)
LONG WINAPI Debug::crashStackCallback(struct _EXCEPTION_POINTERS* exceptionInfo) {
QString savePath = "C:/SightPro/dump/";
QDir dir(savePath);
qDebug() <<"Path=" << savePath;
if(!dir.exists() && !dir.mkpath(savePath)) {
//app->exit(E_UNEXPECTED);
return EXCEPTION_EXECUTE_HANDLER;
}
savePath.append("sightPro");
savePath.append(".dmp");
HANDLE dump = CreateFileW(savePath.toStdWString().c_str(), GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == dump) {
//app->exit(E_UNEXPECTED);
return EXCEPTION_EXECUTE_HANDLER;
}
MINIDUMP_EXCEPTION_INFORMATION miniDumpExceptionInfo;
miniDumpExceptionInfo.ExceptionPointers = exceptionInfo;
miniDumpExceptionInfo.ThreadId = GetCurrentThreadId();
miniDumpExceptionInfo.ClientPointers = TRUE;
DWORD idProcess = GetCurrentProcessId();
MiniDumpWriteDump(GetCurrentProcess(), idProcess, dump,
MiniDumpWithFullMemory, &miniDumpExceptionInfo, NULL, NULL);
// 第四个参数 DumpType 指定类型,用于生成包含不同信息、大小的dump日志。
CloseHandle(dump);
//app->exit(E_UNEXPECTED);
return EXCEPTION_EXECUTE_HANDLER;
}
#endif
}
在应用程序中调用如下:
#if defined(Q_OS_WIN32)
SetUnhandledExceptionFilter(ysm::Debug::crashStackCallback);
#endif
同时,pro文件中添加如下内容:
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -lDbgHelp