Hello 试用 breakpad (linux)

试用了一下 breakpad

breakpad 是一个收集程序crash 信息的系统,与gdb不同的是:gdb适合自己调试crash程序用; 而 breakpad 适合release 后的程序 (收集程序在用户手中运行crash的信息)

安装breakpad

别在 github上乱找了(我找了两个都不能编译成功,貌似别人随便放在那里的,,没有维护),用svn下载(TMD访问googlecode还要翻墙)

svn checkout google-breakpad-read-only

编译

使用下面的命令,就都编译了好了

mvgoogle-breakpad-read-onlygoogle-breakpad

cd google-breakpad; ./configure; make;

试用

编写程序如下

cat test.cpp #include <iostream>#include "client/linux/handler/exception_handler.h"static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,void* context,bool succeeded){ printf("Dump path: %s\n", descriptor.path()); return succeeded;}void crash(){ volatile int* a = (int*)(NULL); *a = 1;}int main(int argc, char* argv[]){ google_breakpad::MinidumpDescriptor descriptor("."); google_breakpad::ExceptionHandler eh(descriptor,NULL,dumpCallback,NULL,true,-1); crash(); return 0;}用命令下面的命令编译

g++ -g -I google-breakpad/src -o test test.cpp google-breakpad/src/client/linux/libbreakpad_client.a -lpthread

运行得到下面的信息

./testDump path: ./2d1b6c3c-169e-a935-6582667f-75b5fac0.dmpSegmentation fault (core dumped)

参看stack 信息

方法1:

google-breakpad/src/tools/linux/md2core/minidump-2-core 2d1b6c3c-169e-a935-6582667f-75b5fac0.dmp > core

$ gdb ./test core

…Core was generated by `./test’.Program terminated with signal SIGSEGV, Segmentation fault.#0 0x0000000000401f26 in crash () at test.cpp:1616 *a = 1;(gdb)

方法2:

$ google-breakpad/src/tools/linux/dump_syms/dump_syms ./test | head -1MODULE Linux x86_64 F344E837CC5CA50047E4A236E36FA3BA0 test

$ mkdir -p ./symbols/test/F344E837CC5CA50047E4A236E36FA3BA0

$ google-breakpad/src/tools/linux/dump_syms/dump_syms ./test > ./symbols/test/F344E837CC5CA50047E4A236E36FA3BA0/test.sym$ google-breakpad/src/processor/minidump_stackwalk 2d1b6c3c-169e-a935-6582667f-75b5fac0.dmp symbols/…Thread 0 (crashed)0 test!crash [test.cpp : 16 + 0x4] rax = 0x0000000000000000 rdx = 0x0000000000617280 rcx = 0x0000000000000000 rbx = 0x0000000000000000…

本文没有讨论minidump文件的上传和下载

ref

https://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad

重新开始吧!下次我会吸取教训,不让自己犯同样的错误的;

Hello 试用 breakpad (linux)

相关文章:

你感兴趣的文章:

标签云: