MiniDump

news2024/11/27 4:14:44

一、minidump 模块集成

// .pro
QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp


QMAKE_LFLAGS_RELEASE += /MAP
QMAKE_CFLAGS_RELEASE += /Zi
QMAKE_LFLAGS_RELEASE += /debug /opt:ref

QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO

LIBS += -lDbgHelp



# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

// main.cpp
#include <QCoreApplication>
#include <QDir>
#include <QDateTime>
#include <QDebug>
#ifdef Q_OS_WIN
#   include <windows.h>
#   include <dbghelp.h>
#   pragma comment( lib, "Dbghelp.lib" )
#endif

#define DumpFileDir qApp->applicationDirPath() + "/dump/"


static LONG WINAPI AppExceptionCallback(struct _EXCEPTION_POINTERS *ExceptionInfo)
{
    QString savePath = DumpFileDir;
    savePath.append(QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"));
    savePath.append(".dmp");
    qDebug() << savePath;

    QString msg;
    HANDLE hDumpFile = CreateFileW(savePath.toStdWString().c_str(),
                                   GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ,
                                   0, CREATE_ALWAYS, 0, 0);
    if(INVALID_HANDLE_VALUE == hDumpFile)
    {
        return EXCEPTION_EXECUTE_HANDLER;
    }


    MINIDUMP_EXCEPTION_INFORMATION ExpParam;
    ExpParam.ThreadId = GetCurrentThreadId();
    ExpParam.ExceptionPointers = ExceptionInfo;
    ExpParam.ClientPointers = TRUE;

    // 创建Dump文件
    MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpWithDataSegs, ExceptionInfo ? &ExpParam : nullptr, nullptr, nullptr);
    CloseHandle(hDumpFile);


    // 提示
    QString strTitle ("Application Error");
    QString strContent ("I'm Sorry,Application is Crash!");
    qDebug() << strContent << "," << QStringLiteral("dump文件路径为 ") << savePath;

    return EXCEPTION_EXECUTE_HANDLER;
}


/// crashed 模块
int testCrashedFunc(int ia,int ib)
{
    int ret = ia/ib;
    qDebug() << ret;
    return ret;
}


int main(int argc, char *argv[])
{
    QCoreApplication a(argc,argv);

#ifdef Q_OS_WIN
    QDir dir(DumpFileDir);
    if(!dir.exists())
        if (!dir.mkpath(DumpFileDir))
            qDebug() << QStringLiteral("创建dump文件目录失败");

    SetUnhandledExceptionFilter(AppExceptionCallback);
#endif

    testCrashedFunc(10,0);
    return 0;
}


二、dump文件分析

调试可参考: https://www.cnblogs.com/kekec/archive/2012/11/14/2755924.html

或者参考 https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/getting-started-with-windbg
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/992924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想兼职?学网络安全,钱赚到你手软

前言 疫情过后&#xff0c;现在的经济形式并不好&#xff0c;所以有很多人想在本职工作以外找一份兼职&#xff0c;亦或者担心自己被裁员&#xff0c;想先学一门技术&#xff0c;从而提高自己的抗风险能力&#xff0c;这没有比网络安全更适合的了。如果有基础的小伙伴完全可以…

01深度学习目标检测引入

目标检测是计算机视觉领域的一个重要任务&#xff0c;旨在从图像或视频中准确地检测和定位特定的目标物体。 一、目标检测问题定义 目标检测是在图片中对可变数量的目标进行查找和分类。 二、目标检测过程中的常见的问题 目标种类和数量问题目标尺度问题外在环境干扰问题 三…

IDEA显示val,var的推断类型的设置

在java中val,var可以减少繁琐的代码量&#xff0c;但是IDEA默认关掉自动类型&#xff0c;导致使用val&#xff0c;var表示的不能一言判别类型&#xff0c;并且不能显示点入查看类型的详情因此需要在idea中设置&#xff0c;能够自动显示推断类型。 步骤1 Setting--->editor…

网络安全(黑客)工具大全

还是一句话&#xff0c;功夫再高&#xff0c;也怕菜刀 首先&#xff0c;恭喜你发现了宝藏。 本文章集成了全网优秀的开源攻防武器项目&#xff0c;包含&#xff1a; 信息收集工具&#xff08;自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端…

CSP 202112-1 序列查询

答题 这道题不难&#xff0c;但如果直接去实现查询f&#xff08;x&#xff09;的话&#xff0c;算法效率会非常低 我们直接观察样例&#xff0c;15&#xff08;5-2&#xff09;*1&#xff08;8-5&#xff09;*2&#xff08;10-8&#xff09;*3 所以我们可以写出下面程序 #i…

无涯教程-JavaScript - IMSUM函数

描述 IMSUM函数以x yi或x yj文本格式返回两个或多个复数的和。当添加复数时,实数和虚数系数分别相加,即找到两个复数a bi和c di的和的方程为- (a bi)(c in)(a c)(b d)我 语法 IMSUM (inumber1, [inumber2] ...)争论 Argument描述Required/OptionalInumber11 to 25…

css relative 和absolute布局

1、relative和absolute内部的元素都是相对于父容器&#xff0c;若父容器没有指定为relative&#xff0c;则默认为整个文档视图空间&#xff0c;absolute可以重叠元素&#xff0c;relative则不行。relative意味着元素的任意属性如left和right都是相对于其他元素的。absolute则相…

二叉树(上)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示&#xff08;树的存储&#xff09; 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3 特殊的二叉树&#xff1a; 2.4 二叉树的性质 3.二叉树的顺…

安全基础 --- 原型链污染

原型链 大部分面向对象的编程语言&#xff0c;都是通过“类”&#xff08;class&#xff09;实现对象的继承。传统上&#xff0c;JavaScript 语言的继承不通过 class&#xff0c;而是通过“原型对象”&#xff08;prototype&#xff09;实现 1、prototype 属性的作用 JavaScri…

【云原生进阶之PaaS中间件】第一章Redis-1.4过期策略

1 设置带过期时间的 key # 时间复杂度&#xff1a;O&#xff08;1&#xff09;&#xff0c;最常用方式 expire key seconds# 字符串独有方式 setex(String key, int seconds, String value)除了string独有设置过期时间的方法&#xff0c;其他类型都需依靠expire方法设置时间&a…

高效数据湖构建与数据仓库融合:大规模数据架构最佳实践

文章目录 数据湖和数据仓库&#xff1a;两大不同理念数据湖数据仓库 数据湖与数据仓库的融合统一数据目录数据清洗和转换数据安全和权限控制数据分析和可视化 数据湖与数据仓库融合的优势未来趋势云原生数据湖自动化数据处理边缘计算与数据湖融合 结论 &#x1f389;欢迎来到云…

盲盒游戏的盈利原理

盲盒游戏&#xff0c;一种极具不确定性的娱乐方式&#xff0c;以其独特的魅力和盈利模式吸引了大量消费者和商家的关注。本文将从盲盒App的盈利模式、随机性、极低成本和超高复购率四个方面&#xff0c;深入剖析其盈利原理。 一、盈利模式 盲盒App的盈利模式主要是通过…

Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)

目录 一、Range分区分配策略原理1.1、Range分区分配策略原理的示例一1.2、Range分区分配策略原理的示例二1.3、Range分区分配策略原理的示例注意事项 二、Range 分区分配策略代码案例2.1、创建带有4个分区的fiveTopic主题2.2、创建三个消费者 组成 消费者组2.3、创建生产者2.4、…

学会用命令行创建uni-app项目并用vscode开放项目

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 创建 uni-app 项目 命令行创建 uni-app 项目 编译和运行 uni-app 项目&#xff1a; 用 VS Code 开发 uni…

深入浅出学Verilog--基础语法

1、简介 Verilog的语法和C语言非常类似&#xff0c;相对来说还是非常好学的。和C语言一样&#xff0c;Verilog语句也是由一连串的令牌&#xff08;Token&#xff09;组成。1个令牌必须由1个或1个以上的字符&#xff08;character&#xff09;组成&#xff0c;令牌可以是&#x…

前端通过第三插件uuid 生成一个 uuid

有时候 后端会让我们自己生成一个uuid 我们没必要自己去写 直接用第三方插件就好了 先终端执行 npm install uuid这样 我们第三方插件就进来了 然后 引入一定要根据环境来 //TS环境引入 import { v4 as uuidv4 } from uuid; //js环境引入 const { v4: uuidv4 } require(uui…

Ubuntu 20.04出现蓝牙无法打开的问题(已解决)

安装Ubuntu20.04后&#xff0c;蓝牙无法打开&#xff0c;按钮开启后蓝牙仍处于关闭状态 解决方法&#xff08;四种方式&#xff09; 1.卸载并重新加载btusb内核模块&#xff08;支持蓝牙设备的内核模块&#xff09; sudo rmmod btusb sleep 1 sudo modprobe btusb2、安装蓝牙工…

OpenRoads Designer道路边坡渐变过渡之二点特征名称覆盖

点特征名称覆盖在模板内进行设置&#xff0c;因此使用点特征名称覆盖实现边坡外口连续适用于使用一个模板创建的一段道路&#xff08;廊道&#xff09;模型内出现的边坡开口线间断的情况&#xff0c;对于使用多个模板创建的一系列首尾相连的道路模型&#xff0c;在相邻模型间出…

性能测试中TPS上不去的几种原因

中TPS一直上不去&#xff0c;是什么原因&#xff1f; 这篇文章&#xff0c;就具体说说在实际压力测试中&#xff0c;为什么有时候TPS上不去的原因。 先来解释下什么叫TPS&#xff1a; TPS&#xff08;Transaction Per Second&#xff09;&#xff1a;每秒事务数&#xff0c;…

腾讯云学生专属便宜云服务器如何购买?

随着云计算技术的快速发展&#xff0c;越来越多的学生开始关注和使用云服务器。腾讯云作为国内知名的云计算服务提供商&#xff0c;推出了一系列针对学生的优惠活动&#xff0c;让更多学生能够享受到云服务器的便利和优势。本文将详细介绍如何购买腾讯云学生专属的便宜云服务器…