【GiraKoo】Breakpad 崩溃分析系统

Breakpad 是 Google 开发的跨平台开源库,用于捕获应用程序崩溃并生成 Minidump 文件进行分析。 为了简化dmp的分析流程,开源了以下项目,可以从带有sym信息的so中解析出符号文件,结合dmp直接输出堆栈。

工具狐(ToolFox)/Breadpad Dump文件解析工具

核心功能

  1. 捕获崩溃:监控程序崩溃(段错误、异常等)
  2. 生成 Minidump :记录崩溃现场信息,生成轻量级 .dmp 文件
  3. 上传报告:可选择自动上传到服务器
  4. 离线分析:结合符号文件重建调用堆栈

工作原理

graph TB subgraph BuildTime ["编译时"] A[源代码] --> B[编译] B --> C[可执行文件] B --> D[调试信息] D --> E[dump_syms] E --> F[符号文件 .sym] end subgraph Runtime ["运行时"] G[程序启动] --> H[初始化 Breakpad] H --> I[注册异常处理] I --> J[正常运行] J --> K{崩溃?} K -->|是| L[捕获现场信息] L --> M[生成 Minidump] M --> N[上传文件] K -->|否| J end subgraph ServerSide ["服务器端"] N -.-> O[崩溃服务器] F -.-> P[符号存储] O --> Q[minidump_stackwalk] P --> Q Q --> R[生成崩溃报告] end style BuildTime fill:#e6f3ff style Runtime fill:#ffe6e6 style ServerSide fill:#e6ffe6

关键步骤

1. 编译时

  • 生成调试信息文件(.pdb.dSYM.debug
  • 使用 dump_syms 提取符号文件:
bash 复制代码
dump_syms your_app.pdb > your_app.sym

2. 运行时

  • 初始化 Breakpad 客户端
  • 注册异常处理器
  • 崩溃时捕获:寄存器、堆栈、模块信息
  • 生成 Minidump 文件

3. 服务器端分析

  • 接收 Minidump 文件
  • 使用符号文件解析地址:
bash 复制代码
minidump_stackwalk crash.dmp /path/to/symbols > report.txt

集成示例

cpp 复制代码
#include "client/windows/handler/exception_handler.h"

bool DumpCallback(const wchar_t* dump_path, const wchar_t* minidump_id,
                  void* context, EXCEPTION_POINTERS* exinfo,
                  MDRawAssertionInfo* assertion, bool succeeded) {
    if (succeeded) {
        wprintf(L"Dump generated: %s\\%s.dmp\n", dump_path, minidump_id);
    }
    return succeeded;
}

int main() {
    // 初始化 Breakpad
    google_breakpad::ExceptionHandler eh(
        L"./crashes",     // 保存目录
        nullptr,          // 过滤器
        DumpCallback,     // 回调函数
        nullptr,          // 用户数据
        google_breakpad::ExceptionHandler::HANDLER_ALL
    );
    
    // 应用程序代码
    return 0;
}

优势与局限

优势

  • 跨平台支持
  • 轻量级 Minidump 文件
  • 高可靠性
  • 开源免费

局限

  • 符号文件版本匹配要求严格
  • 不含堆内存信息
  • 需要服务器端处理

最佳实践

  1. 将符号文件生成集成到构建流程
  2. 为每个版本保存对应符号文件
  3. 建立自动化上传和分析流程
  4. 结合日志系统进行综合分析
  5. 设置崩溃率监控告警
相关推荐
Univin1 小时前
C++(10.5)
开发语言·c++·算法
AA陈超2 小时前
虚幻引擎UE5专用服务器游戏开发-33 在上半身播放组合蒙太奇
c++·游戏·ue5·游戏引擎·虚幻
qq_428639612 小时前
虚幻基础:组件间的联动方式
c++·算法·虚幻
怎么没有名字注册了啊2 小时前
C++后台进程
java·c++·算法
slim~3 小时前
CLion实现ini 解析器设计与实现
c++·后端·clion
AA陈超4 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P05-05 游戏效果委托
c++·游戏·ue5·游戏引擎·虚幻
杨小码不BUG4 小时前
Davor的北极探险资金筹集:数学建模与算法优化(洛谷P4956)
c++·算法·数学建模·信奥赛·csp-j/s
mit6.8244 小时前
10.5 数位dp
c++·算法
初圣魔门首席弟子4 小时前
C++ STL 向量(vector)学习笔记:从基础到实战
c++·笔记·学习
青草地溪水旁5 小时前
Visual Studio Code中launch.json深度解析:C++调试的艺术
c++·vscode·json