layout: post
title: “使用Google开源库breakpad实现错误报告功能”
subtitle: “Google大法好”
date: “2017-08-10”
author: “cj”
tags:
breakpad
c++
linux
google
bugreport
前阵子写的微信公众号后台服务器自动崩溃重启了一次,看日志没任何头绪,看来需要core dump。
但是搜索一阵子发现,这玩意真难用,要ulimit -c unlimited
后才会生成dump。又搜索一番,发现Google出品的breakpad,谷歌出品,必属精品,就它了!
- 按照官方教程,下载源码
git clone https://chromium.googlesource.com/breakpad/breakpad
- 有几个第三方库默认情况没有下载,按需手动下载到breakpad/src/thirdparty中
cd breakpad
git clone https://chromium.googlesource.com/linux-syscall-support src/third_party/lss
- 编译安装
./configure
make
make check
sudo make install
安装目录默认为/usr/local/include/breakpad
,库目录/usr/local/lib/libbreakpad.a
, libbreakpad_client.a
- 应用
方便起见,写了一个自动生成symbol调试信息的脚本build_symbols.sh:
#!/bin/bash
out=$1
sym="${out}.sym"
dump_syms $out > $sym
line=$(head -n1 ${
sym})
arr=($line)
sdir="./symbols/${out}/${arr[3]}"
mkdir -p $sdir
mv $sym $sdir
用例./build_symbols.sh test
我把它写在了makefile中的make release段内。
崩溃后自动调用写好的脚本生成stack walk并发送邮件给自己的邮箱
#include <client/linux/handler/exception_handler.h>
void crash_send(const std::string& dmp_path)
{
try {
auto path = bfs::canonical("../tools/send_mail_.sh");