Qt开发: 捕获系统异常,产生dmp文件
2017-07-29 10:55
375 查看
项目 *.pro里添加
LIBS += -lDbgHelp
main.cpp:
#include "mainWidget.h"
#include "MainForm.h"
#include <QApplication>
#include <QTextCodec>
#include <QDir>
#include <windows.h>
#include <dbghelp.h>
//异常捕获函数
long ApplicationCrashHandler(EXCEPTION_POINTERS *pException){
{
// 在程序exe的上级目录中创建dmp文件夹
QDir *dmp = new QDir;
bool exist = dmp->exists("../dmp/");
if(exist == false)
dmp->mkdir("../dmp/");
}
QDateTime current_date_time = QDateTime::currentDateTime();
QString current_date = current_date_time.toString("yyyy_MM_dd_hh_mm_ss");
QString time = current_date + ".dmp";
EXCEPTION_RECORD *record = pException->ExceptionRecord;
QString errCode(QString::number(record->ExceptionCode, 16));
QString errAddr(QString::number((uint)record->ExceptionAddress, 16));
QString errFlag(QString::number(record->ExceptionFlags, 16));
QString errPara(QString::number(record->NumberParameters, 16));
qDebug()<<"errCode: "<<errCode;
qDebug()<<"errAddr: "<<errAddr;
qDebug()<<"errFlag: "<<errFlag;
qDebug()<<"errPara: "<<errPara;
HANDLE hDumpFile = CreateFile((LPCWSTR)QString("../dmp/" + time).utf16(),
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hDumpFile != INVALID_HANDLE_VALUE) {
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(hDumpFile);
}
else{
qDebug()<<"hDumpFile == null";
}
return EXCEPTION_EXECUTE_HANDLER;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
//注冊异常捕获函数
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler);
MainForm mf;
mf.show();
return a.exec();
}
相关文章推荐
- Android使用UncaughtExceptionHandler捕获全局异常 android获取手机信息大全Java追加文件内容使用JavaMail发送邮件OkHttp获取系统时间
- Python3基础 try-指定except-as reason 捕获打开一个不存在的文件的时候,会产生OSError异常的示例
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架- 5.4平台日志、异常管理、生成自动升级配置文件模块
- 使用cocoa捕获dock栏中的“退出”事件,解决qt开发的应用程序退出异常的问题
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架- 5.4平台日志、异常管理、生成自动升级配置文件模块
- Windows7蓝屏后或系统故障产生的.dmp文件如何打开以及如何分析蓝屏的原因
- vs2005集成qt后产生的qt项目文件结构分析
- 文件过滤系统驱动开发Filemon学习笔记
- VC文件过滤系统驱动开发Filemon学习笔记
- Windows文件系统过滤驱动开发教程
- Windows文件系统过滤驱动开发教程
- Windows文件系统过滤驱动开发教程(2)
- Windows文件系统过滤驱动开发教程(10)
- Windows文件系统过滤驱动开发教程(7)
- Windows文件系统过滤驱动开发教程(5)
- Windows文件系统过滤驱动开发教程(8)
- Windows文件系统过滤驱动开发教程(11)
- Windows文件系统过滤驱动开发教程
- Windows文件系统过滤驱动开发教程(3)
- Windows文件系统过滤驱动开发教程