【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. 设置崩溃率监控告警
相关推荐
爱吃KFC的大肥羊34 分钟前
C/C++常用字符串函数
c语言·数据结构·c++·算法
岁忧2 小时前
(nice!!!)(LeetCode 每日一题) 2561. 重排水果 (哈希表 + 贪心)
java·c++·算法·leetcode·go·散列表
我要成为c嘎嘎大王2 小时前
【C++】类和对象(2)
开发语言·c++
C++ 老炮儿的技术栈3 小时前
在vscode 如何运行a.nut 程序(Squirrel语言)
c语言·开发语言·c++·ide·vscode·算法·编辑器
HKUST_ZJH3 小时前
交互 Codeforces Round 1040 Interactive RBS
c++·算法·交互
weixin_307779135 小时前
设计Mock华为昇腾GPU的MindSpore和CANN的库的流程与实现
c++·算法·华为·系统架构·gpu算力
kk”6 小时前
C++ 模板初阶
开发语言·c++
仟濹9 小时前
【C/C++】整数超过多少位时用「高精度」
c语言·c++·算法
新手小新13 小时前
C++游戏开发(2)
开发语言·前端·c++
程序员编程指南15 小时前
Qt 嵌入式界面优化技术
c语言·开发语言·c++·qt