本文只是记录下 MSVC+Qt 生成 dump 的代码。
dump 文件能够保存程序内部的内存、堆栈、句柄、线程等程序运行相关的信息,当程序异常无法在调试环境里解决时,dump 文件是分析问题的重要手段。
相关 win API 文档可以在 MSDN 查看:https://docs.microsoft.com/zh-cn/search/?terms=MiniDumpWriteDump
DUMPTYPE 参数我只使用了 MiniDumpNormal,可以根据文档加上自己需要的。
dump 文件一般配合 pdb 文件使用,通过 pdb 可以找到堆栈地址对应的函数、行号等。
如果使用的 QtCreator,可以打开如下设置:
如果使用 VS ,可以打开如下两个设置:
生成 dump 完整代码:
#include "mainwindow.h"
#include "CrashDump.h"
#include
int main(int argc, char *argv[])
{
CrashDump::init("Test");
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#pragma once
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "DbgHelp")
#include
static QString __module_name;
/**
* @brief MSVC+Qt 生成dump文件
* @author 龚建波
* @date 2021-2-11
* @details 配合pdb文件使用,生成exe时记得生成dpb
*/
class CrashDump
{
public:
//初始化注册
static void init(const QString &module)
{
__module_name=module;
//异常捕获
::SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)exceptionFilter);
}
//获取exe路径
static QString getAppPath()
{
DWORD v;
QVarLengthArray buffer;
size_t size = 0;
do {
size += 2048;
buffer.resize((int)size);
v = ::GetModuleFileNameA(NULL, buffer.data(), DWORD(buffer.size()));
} while (v >= size);
return QString::fromLocal8Bit(buffer.data(), v);
}
//生成dump路径,可以自定义路径以及命名格式
static QString getDumpPath()
{
QFileInfo app_info(getAppPath());
QString dump_path=QString("%1/dump/%2 %3.dmp")
.arg(app_info.absolutePath())
.arg(__module_name)
.arg(QDateTime::currentDateTime().toString("yyyy_MM_dd hh.mm.ss"));
QFileInfo dump_info(dump_path);
if(!dump_info.dir().exists()&&!dump_info.dir().mkpath(dump_info.absolutePath()))
dump_path=QString("%1.dump").arg(__module_name);
return dump_path;
}
//异常处理
static LONG exceptionFilter(LPEXCEPTION_POINTERS lpExceptionInfo)
{
QString dump_path = getDumpPath();
std::cerr
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?