C++(Qt)软件调试---vcpkg安装crashpad(34)

C++(Qt)软件调试—vcpkg安装crashpad(34)


文章目录

  • C++(Qt)软件调试---vcpkg安装crashpad(34)
    • @[toc]
    • 1 概述🐜
    • 2 环境配置
    • 3 qt使用crashpad库捕获异常
    • 4 cmake中添加crashpad
    • 5 相关地址🐐

更多精彩内容
👉内容导航 👈
👉C++软件调试 👈

1 概述🐜

前面讲了如何使用crashpad捕获C++程序异常,生成dump文件用于分析;

由于之前文章中的编译好的crashpad下载地址失效,自己编译又比较复杂,并且地址在外网,所以本文主要讲如何使用vcpkg来构建安装crashpad库。

Crashpad 是 Google 开源的跨平台崩溃收集和转储(dump)工具,主要用于自动捕获程序异常(如崩溃、未处理异常),生成 minidump 文件,并可自动上传到远程服务器进行分析。

它常用于 Windows、Linux、macOS 等系统的 C++ 应用,Chrome 浏览器和许多 Google 产品都在用。

主要功能:

  • 自动捕获崩溃(如访问违规、断言失败等)
  • 生成 minidump 文件(包含崩溃时的内存、寄存器等信息)
  • 支持自定义注释、附加信息
  • 可自动上传 dump 到远程服务器
  • 支持多平台(Windows、Linux、macOS)

vcpkg 是一个由微软开发的开源 C/C++ 包管理工具,主要用于简化在 Windows、Linux 和 macOS 上安装和管理 C/C++ 库的过程。

它可以自动下载、编译并集成第三方库到你的项目中,支持 Visual Studio、CMake 等主流开发环境。

环境说明
系统windows10
vs版本2022
梯子GreenHub

2 环境配置

  • 下载vcpkg:下载地址,或者使用命令git clone https://github.com/microsoft/vcpkg.git下载;

  • 下载完成后讲vcpkg路径添加进环境变量,方便使用;

    在这里插入图片描述

  • 使用管理员打开powerShell,不要用cmd;

  • 运行bootstrap-vcpkg.bat脚本下载vcpkg.exe;

  • 可以使用vcpkg search crashpad命令查询包的信息或者进入vcpkg网站查询;

    在这里插入图片描述

  • 然后运行vcpkg install crashpad命令进行安装,安装完成后包位于D:\vcpkg\packages\crashpad_x64-windows路径下;(系统中需要安装有vs编译工具)

  • 或者创建一个C++工程,在工程路径下创建vcpkg.json文件,如下所示;

    {"name": "untitled5","version-string": "1.0.0","dependencies": ["crashpad"]
    }
    
  • 然后powershell进入工程路径下,运行vcpkg install命令,安装完成后包就位于工程路径下;

    在这里插入图片描述

  • vcpkg_installed\x64-windows\lib路径下为Release版本库;

  • vcpkg_installed\x64-windows\debug\lib路径下为debug版本库;

  • vcpkg_installed\x64-windows\include路径为头文件;

  • vcpkg_installed\x64-windows\tools\crashpad路径下为crashpad_handler独立进程,负责实际 dump 生成和上传。

3 qt使用crashpad库捕获异常

  • 创建一个qt工程;

  • 在工程路径下使用vcpkg安装crashpad库;

  • 打开pro文件,添加项目代码(debug版本),除了crashpad的库外,需要注意的是还需要添加Advapi32这个库;

    
    LIBS += -L$$PWD/vcpkg_installed/x64-windows/debug/lib/ -lvcpkg_crashpad_base\-lvcpkg_crashpad_client\-lvcpkg_crashpad_client_common\-lvcpkg_crashpad_util\-lzlibd\-lAdvapi32  # 注意,必须添加INCLUDEPATH += $$PWD/vcpkg_installed/x64-windows/include
    DEPENDPATH += $$PWD/vcpkg_installed/x64-windows/include
    
  • 打开main.cpp文件,添加下面测试代码;

    #include <stddef.h>
    #include <string.h>
    #include <iostream>
    #include <thread>
    #include <chrono>#define NOMINMAX
    #include <client/crash_report_database.h>
    #include <client/settings.h>
    #include <client/crashpad_client.h>
    #include <client/crashpad_info.h>std::unique_ptr<crashpad::CrashReportDatabase> database;static bool startCrashHandler(std::string const& url, std::wstring const& handler_path, std::wstring const& db_path)
    {using namespace crashpad;std::map<std::string, std::string> annotations;std::vector<std::string> arguments;annotations["format"] = "minidump";       // 设置生成minidumparguments.push_back("--no-rate-limit");   // 禁用了崩溃速率限制base::FilePath db(db_path);base::FilePath handler(handler_path);database = crashpad::CrashReportDatabase::Initialize(db);   // 打开一个崩溃报告数据库if (database == nullptr || database->GetSettings() == NULL){return false;}database->GetSettings()->SetUploadsEnabled(true);    // 启用自动上传。// 启动一个crash处理程序进程return CrashpadClient().StartHandler(handler, db, db, url, annotations, arguments, false, false, {});
    }int main(int argc, char** argv)
    {std::string url("http://127.0.0.1:8000");               // 存储服务器的url,这里设置位本地地址std::wstring handler_path(L"./crashpad_handler.exe");   // 指向crashpad_handler.exe的路径std::wstring db_path(L"./crash");                       // 存储dump的路径startCrashHandler(url, handler_path, db_path);int* p = nullptr;*p = 123;return 0;
    }
  • 编译生成可执行程序,然后将vcpkg_installed\x64-windows\tools\crashpad中的文件拷贝到可执行程序路径下;

    在这里插入图片描述

  • 双击运行测试程序,出现异常后会在crash\reports路径下生成dump文件;

4 cmake中添加crashpad

cmake_minimum_required(VERSION 3.15)
# 设置 vcpkg 工具链(方法1)
# set(CMAKE_TOOLCHAIN_FILE  "D:/vcpkg/scripts/buildsystems/vcpkg.cmake")
# 设置 vcpkg 配置文件(方法2)
include("D:/vcpkg/scripts/buildsystems/vcpkg.cmake")# 设置c++17版本(需要大于C++17)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(test1) # 引入crashpad
find_package(crashpad CONFIG REQUIRED)  add_executable(${PROJECT_NAME} main.cpp) # 链接crashpad
target_link_libraries(${PROJECT_NAME} PRIVATE crashpad)

5 相关地址🐐

  • vcpkg下载地址
  • vcpkg - 来自 Microsoft 的开源 C/C++ 依赖项管理器
  • vcpkg.json 参考 | Microsoft Learn
  • C++(Qt)软件调试—crashpad捕获崩溃


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

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

相关文章

Kafka 副本同步异常与 ISR 收缩故障排查实录

背景 某高流量 Kafka 集群&#xff08;原 10G 网卡&#xff09;在切中心时频繁触发带宽报警&#xff0c;扩容至 25G 网卡后出现副本同步异常&#xff1a; 操作流程&#xff1a;停机→升级网卡→重启→触发分区同步→切换首选 Leader现象&#xff1a; 写入流量上升后&#xff0c…

顶点 (VS)vs 片段(FS):OpenGL纹理滚动着色器的性能博弈与设计哲学

一个微妙的选择&#xff0c;影响整个应用性能表现在实时图形渲染中&#xff0c;实现纹理滚动效果是一种常见需求。但当我们在顶点着色器和片段着色器之间做出不同实现选择时&#xff0c;会对性能产生显著影响。今天&#xff0c;我们将深入探讨这两种实现的差异&#xff0c;帮助…

基于博客系统的自动化测试项目

目录 一、引言 二、项目背景 三、项目功能 1&#xff09;初始登录界面 2&#xff09;博客首页 3&#xff09;博客详情页 4&#xff09;博客编辑页 四、测试工具 1&#xff09;基础操作系统环境 2&#xff09;浏览器环境 3&#xff09;开发与测试工具环境 4&#xf…

R 语言 eulerr 包绘制韦恩图:比例精准

在数据可视化中,韦恩图是展示多组数据交集关系的常用工具,尤其在生物信息(如基因差异表达分析)、统计分析等领域高频使用。但传统绘图工具常面临椭圆比例失衡、数值显示混乱、样式调整繁琐等问题,而 R 语言的eulerr包恰好能解决这些痛点 —— 它支持按数据比例自动适配图形…

CRYPT32!CryptMsgUpdate函数分析和asn.1 editor nt5inf.cat 的总览信息

0000: 30 83 09 69 2f ; SEQUENCE (9692f Bytes) 0005: 06 09 ; OBJECT_IDENTIFIER (9 Bytes) 0007: | 2a 86 48 86 f7 0d 01 07 02| ; "PKCS 7 已签名 (1.2.840.113549.1.7.2)" 0010: …

04数据库约束实战:从入门到精通

感谢黑马程序员提供的免费课程约束概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。常见的几种约束&#xff1a;注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创…

WPF+IOC学习记录

最近在学WPF&#xff0c;上一篇文章记录了WPF的MVVM自己实现和用框架的区别&#xff08;WPFMVVM入门学习&#xff09;&#xff0c;接下这篇文章记录一下在WPF中使用IOC&#xff0c;这里演示用的是微软官方的DependencyInjection&#xff0c;也可以用其他的第三方框架。 项目源…

从零开始学习单片机16

STM32单片机STM32和51单片机的区别51单片机的外设资源少&#xff0c;寄存器少&#xff0c;运行速度慢&#xff0c;价格便宜&#xff0c;容易上手STM32单片机的外设资源更多&#xff0c;寄存器多&#xff0c;运行速度相对快&#xff0c;价格相对贵&#xff0c;上手相对较难STM32…

[特殊字符]论一个 bug 如何经过千难万险占领线上

谨以此文献给每一个曾与 Bug 搏斗、最终却目睹它成功上线的你 本文旨在揭露 Bug 的狡猾&#xff0c;绝非鼓励以下行为。若你照做&#xff0c;后果自负&#x1f436;每一个在线上逍遥法外的 Bug&#xff0c;都不是偶然。它是一场精心策划的奇迹&#xff0c;是开发、联调、测试、…

Day12-python文件操作(二)

目录前言一、Excel文档操作1.1、xlrd和xlwt库1.2、openpyxl库1.3、pandas库总结前言 今天继续学习文件操作相关内容&#xff0c;为后续办公自动化打基础。 一、Excel文档操作 1.1、xlrd和xlwt库 如果要兼容 Excel 2007 以前的版本&#xff0c;也就是xls格式的 Excel 文件&am…

CollageIt:简单易用的照片拼贴工具

在数字图像处理领域&#xff0c;制作照片拼贴是一种常见的创意表达方式。CollageIt作为一款体积小巧、简单易用的照片拼贴工具&#xff0c;能够帮助用户轻松将多张图片拼合成一张精美的拼贴画。它不仅操作简单&#xff0c;还支持多种图片格式&#xff0c;确保用户可以快速制作出…

Java全栈工程师的实战面试:从基础到微服务的全面解析

Java全栈工程师的实战面试&#xff1a;从基础到微服务的全面解析 一、开场介绍 面试官&#xff1a;你好&#xff0c;欢迎来到我们公司。我是今天的面试官&#xff0c;负责技术部分的评估。请先简单介绍一下你自己。 应聘者&#xff1a;您好&#xff0c;我叫李明&#xff0c;25岁…

驱动开发系列68 - GLSL编译器实现 - 算数指令折叠及访存优化

一 : 指令合并概述 指令折叠的意思,原本一个语句会产生多条指令,通过折叠,可以删除一些中间指令,减少指令数量,并且能够减少寄存器占用。提高执行效率。 举一个例子: MUL A, B, 4 ; A = B * 4MAD D, A, 2, F ; D = A * 2 + F MAD G, A, 3, I ; G …

深入解析Qt节点编辑器框架:高级特性与性能优化(四)

文章目录一、高级交互特性&#xff1a;超越基础操作的用户体验提升1. 节点组管理&#xff1a;折叠与嵌套的层级组织2. 智能连接线路由&#xff1a;避免交叉与视觉混乱3. 批量操作与快捷键&#xff1a;提升操作效率二、性能优化&#xff1a;应对大规模节点场景的核心策略1. 图形…

Python 入门操作指南

引言 Python 是一种简单易学却功能强大的编程语言,广泛应用于数据分析、人工智能、Web 开发等领域。对于初学者而言,掌握 Python 的入门操作是迈向编程世界的第一步。本文将以总分总的结构,系统介绍 Python 的安装方法、推荐的开发工具、第一个 Python 程序示例,以及包管理…

ZooKeeper 安装配置

前言 有时会需要安装开源的大数据集群进行测评或者验证问题&#xff0c;已经装过很多遍了&#xff0c;所以想系统的总结整理一下各个组件的安装部署&#xff0c;包括 Zookeeper、Hadoop、Hive、Spark 等。 版本 Zookeeper 3.5.6 3.8.4 3.9.3 初始化 包括主机名修改、SSH互…

考研数据结构Part3——二叉树知识点总结

一、前言 二叉树是一种特殊的树形结构&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子树和右子树。其特点是子树有严格的左右之分&#xff0c;顺序不可颠倒。从历年真题来看&#xff0c;二叉树的链式存储实现、遍历算法、属性统计是高频考点&#xff0c;常以选择…

网络与信息安全有哪些岗位:(12)威胁分析师

今天是七夕节&#xff0c;首先祝大家早遇良缘、有情人终成眷属&#xff01;&#xff01;七夕节快乐、工作顺利、学业有成~~ 想知道网络与信息安全领域有哪些具体岗位吗&#xff1f;此前我们已陆续介绍网络安全工程师、渗透测试工程师、SOC 总监、SOC 工具运维工程师等核心角色&…

mysql双机热备(主主模式)

一、环境准备 主机名ip操作系统备注node01192.168.48.91CentOS Linux 7 (Core)mysql主库node01192.168.48.92CentOS Linux 7 (Core)mysql主库192.168.48.90漂移IP&#xff08;VIP&#xff09; centos7镜像下载地址&#xff1a; https://mirrors.aliyun.com/centos/7.9.2009/…

微积分 | 积分代换

注&#xff1a;本文为 “微积分 | 积分代换法 ” 相关合辑。 英文引文&#xff0c;机翻未校&#xff0c; 中文引文&#xff0c;略作重排。 未去重&#xff0c;如有内容异常&#xff0c;请看原文。 Integration by Substitution 积分代换法 May 23, 2018 / By Dave Peterson …