今天给大家介绍一个在linux下如何捕获程序崩溃异常的方法

一、google breakpad源码的下载和编译

1、https://github.com/google/breakpad.git,源码地址,git clone XXX克隆即可

2、cd breakpad

3、./configure

4、make

5、make完这里会报错breakpad/src/third_party/lss/linux_syscall_support.h没有这个文件,编译时会出现这个错误

6、该文件可在https://chromium.googlesource.com/linux-syscall-support/下载,并放到breakpad/src/third_party/lss/中,若实在无法翻墙下载的同学,可以在以下链接下载linux_syscall_support.h:
http://download.csdn.net/detail/bingzhongdehuoyan/9716614

7、再次执行3和4,即可成功

二、如何使用

 #include "client/linux/handler/exception_handler.h"

 // 写完minidump后的回调函数
static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded)
{
printf("Dump path: %s\n", descriptor.path()); return succeeded;
}
// 触发crash来测试
void crash()
{
volatile int* a = (int*)(NULL); *a = ;
} int main(int argc, char* argv[])
{
// 初始化
ExceptionHandler google_breakpad::MinidumpDescriptor descriptor("/tmp");
// minidump文件写入到的目录
google_breakpad::ExceptionHandler eh(descriptor, NULL, dumpCallback, NULL, true, -); crash();
return ;
}

1、这样就会在/tmp下生成.dmp文件

2、为了生成可读的stack trace, breakpad需要你将binaries里的调试符号(debugging symbols)转换成基于文本格式的symbol files。

3、接着运行 dump_syms 命令来生成 symbol files,如下:$ google-breakpad/src/tools/linux/dump_syms/dump_syms ./test > test.sym

4、breakpad包含一个叫做 minidump_stackwalk 的工具来将 minidump 文件,外加symbol files来生成一个人可读的stack trace

5、$ google-breakpad/src/processor/minidump_stackwalk minidump.dmp test.sym > test.txt

6、test.txt就是最终生成的可读的异常文件用于分析

最新文章

  1. [转载]Difference between <context:annotation-config> vs <context:component-scan>
  2. sql-char和varchar,nvarchar的区别
  3. kafka监控之KafkaOffsetMonitor
  4. 三角函数计算,Cordic 算法入门
  5. C++ 数据类型及相关问题 及输出精度控制
  6. 解决方案-Microsoft Visual Studio 2012 已停止工作
  7. 网络流(最大流):POJ 1149 PIGS
  8. python中的TCP编程学习
  9. wordpress 显示数学公式 (MathJax-LaTeX)
  10. java连接mysql以及增删改查操作
  11. Collaborative Filtering(协同过滤)算法详解
  12. 计算n的阶乘有多少个尾随零
  13. 20165231 2017-2018-2《Java程序设计》课程总结
  14. JAVA课程课后作业03之作业一
  15. 谈谈JAVA实现节假日验证
  16. jdk eclipse SDK下载安装及配置教程
  17. Linux下删除文件系统空间不释放的问题
  18. hdu 2187(凸包直径 1.枚举 2.旋转卡壳)
  19. 关于Fragment API版本号兼容问题
  20. copy deepcopy辨析

热门文章

  1. Java并发——CAS
  2. 设计模式 | 建造者模式/生成器模式(builder)
  3. jqgrid postData post方式累加参数,缓存了原来的数据
  4. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(1)!
  5. string转QBytearray
  6. npm 模块化管理
  7. 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
  8. [20190130]删除tab$记录的恢复.txt
  9. ping命令的七种用法,看完瞬间成大神
  10. Python基础(time模块,datetime模块)