#include "crashhandler.h"
#include <QMessageBox>
#include <QDateTime>
#include <qglobal.h>
#ifdef _MSC_VER
#include <Windows.h> // Windows.h必须放在DbgHelp.h前,否则编译会报错
#include <DbgHelp.h>
#endif
//MSVC编译器
#ifdef _MSC_VER
//#if defined(_MSC_VER) && (_MSC_VER >= 1600)
//#pragma execution_character_set("utf-8")
//#endif
/**
* @brief 应用程序崩溃处理程序
* @param pException
* @return EXCEPTION_EXECUTE_HANDLER equ 1 表示我已经处理了异常,可以优雅地结束了
* EXCEPTION_CONTINUE_SEARCH equ 0 表示我不处理,其他人来吧,于是windows调用默认的处理程序显示一个错误框,并结束(qt中会导致窗口卡死一段时间)
* EXCEPTION_CONTINUE_EXECUTION equ -1 表示错误已经被修复,请从异常发生处继续执行
*/
LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){//程式异常捕获
//创建 Dump 文件
QString strPath = QString("%1.dmp").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd HH-mm-ss"));
#ifdef UNICODE
LPCWSTR filePath = reinterpret_cast<LPCWSTR>(strPath.utf16());
#else
LPCSTR filePath = reinterpret_cast<LPCSTR>(strPath.toStdString().data());
#endif // !UNICODE
HANDLE hDumpFile = CreateFile(filePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
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, NULL, NULL);
}
//这里弹出一个错误对话框并退出程序
EXCEPTION_RECORD* record = pException->ExceptionRecord;
QString errCode(QString::number((quint64)record->ExceptionCode, 16));
// QString errAdr(QString::number((uint)record->ExceptionAddress, 16));
QString errAdr(QString::number(static_cast<unsigned int>(reinterpret_cast<uintptr_t>(record->ExceptionAddress)), 16));
QMessageBox::critical(nullptr, "Program crash","<FONT size=4><div><b>Express sincere apologies for the errors that have occurred</b><br/></div>"+
QString("<div>error:%1</div><div>error address:%2</div></FONT>").arg(errCode).arg(errAdr),
QMessageBox::Ok);
return EXCEPTION_EXECUTE_HANDLER;
}
#endif
void CrashHandler::initCrashHandler()
{
#ifdef _MSC_VER
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)ApplicationCrashHandler); // 使用win API注册异常处理函数
#endif
}
没有合适的资源?快使用搜索试试~ 我知道了~
Windows端 Qt5.15.2调试程序CrashHandler示例
共6个文件
jpg:3个
h:1个
pri:1个
需积分: 5 1 下载量 4 浏览量
2023-11-08
14:48:13
上传
评论
收藏 74KB ZIP 举报
温馨提示
Windows端 Qt5.15.2调试程序CrashHandler示例,vs2019测试可用
资源推荐
资源详情
资源评论
收起资源包目录
CrashHandler示例.zip (6个子文件)
CrashHandler
crashhandler.cpp 3KB
CrashHandler.pri 442B
crashhandler.h 221B
第三步:main文件中初始化对象.jpg 39KB
第一步:pro文件加载源文件.jpg 15KB
第二步:main文件加入头文件.jpg 24KB
共 6 条
- 1
资源评论
Ley-S
- 粉丝: 25
- 资源: 48
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功