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++(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捕获崩溃