Google Breakpad 之一,跨平台crash 处理上报系统简介

C/C++程序最棘手的时候就是一个字“挂”,总是经常和不经常的挂掉,尤其是那些线上的不经常挂的情况,光看日志定位问题真的很难。

为解决C挂挂的问题,有必要提供一个跨平台的crash处理系统,目前已知的支持平台有windows 、Linux、 OS X 、android、等待。

下面就来看看Google自己用的系统:Breakpad

最好的介绍莫过于谷歌自己的:

谷歌的介绍:http://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad

谷歌翻译-》本人修改版:(不一定准确)minidump-》小型转储

介绍

 Breakpad是一个库和工具套件可以让你发布的应用程序(把编译器提供的调试信息剥离掉的)给用户,记录了崩溃紧凑的“dump”文件,发送回您的服务器,并从这些minidump产生C和C++堆栈踪迹。Breakpad可以根据请求使没有崩溃的程序也可以写出minidump。

目前使用Breakpad的有谷歌浏览器,火狐,谷歌的Picasa,卡米诺,谷歌地球,和其他项目。

Google Breakpad 之一,跨平台crash 处理上报系统简介_第1张图片

Breakpad有三个主要组件:

  • 客户端是一个库,包含在您的应用程序中。 它可以获取当前线程的状态和当前加载的可执行文件和共享库的ID写转储文件。您可以配置客户端发生了崩溃时写入一个minidump时,或明确要求时。
  •  符号卸载器是一个程序,读取由编译器产生的调试信息,并生成一个使用Breakpad格式的符号文件  。
  • 处理器(minidump processor)是一个程序,读取一个minidump文件,找到相应的版本的符号文件的(可执行文件和共享库的转储提到的),并产生了一个人可读的C / C + +堆栈跟踪。

小型转储文件格式(即minidump)

转储文件的格式是由微软开发的类似存储的文件,崩溃便利上传。一个minidump文件包含:

  • 在创建dump的进程中加载​​的可执行文件和共享库列表。此列表中包含的特定版本加载的那些文件的文件名和标识符。
  • 在这个过程中存在的线程列表。对于每个线程转储包括处理器寄存器的状态,线程的堆栈存储器的内容。一般Breakpad客户端没有可用于产生函数名或行号,甚至确定堆栈帧的边界的调试信息,所以这些数据是不可解释的字节流。
  • 其他收集的有关系统转储信息比如:处理器和操作系统版本,转储的原因,等等。

 Breakpad在所有平台上使用Windows dump文件,而不是传统的core文件,有以下几个原因:

  • core文件可能会非常大,不适合在网络上发送给收集器处理。minidump较小,因此它们被设计为使用这种方式。
  • core文件格式缺乏文档信息。例如,Linux标准库不描述寄存器如何存储在PT_NOTE段的。
  • 一个Windows机器上生成一个core dump文件,比起其他机器上生成一个minidump文件,哪个难很难说。
  • 简化了Breakpad处理器,只支持一种文件格式。

概述/一个小型转储的生命周期

通过调用到Breakpad库生成一个minidump。默认初始化Breakpad时,安装了一个异常/信号handler,崩溃时可写一个minidump到磁盘。在Windows上,这是通过SetUnhandledExceptionFilter()实现;在 OS X上,这是通过创建一个线程,等待的Mach exception端口,在Linux上,这是通过安装一个信号handler来应对程序的各种异常情况,如SIGILL,SIGSEGV等。

一旦生成minidump,每个平台都有一个略有不同的方式上传的崩溃dump。在Windows和Linux上,提供一个单独的函数库,可以被称为做upload。在OS X上,一个单独的进程产生,提示用户是否允许,如果同意这样做则发送文件。

术语

进程内与进程外的异常处理——进程内写minidump通常被认为是不安全的,关键处理数据结构可能已经被破坏,异常处理程序运行所处的堆栈或可能已经被覆盖,等等。所有3个平台都支持“进程外”异常处理。

集成概述

Breakpad代码概述

所有的客户端代码访问谷歌计划在http://code.google.com/p/google-breakpad 。 是在src目录下的以下目录结构:

  • 处理器---包含转储处理的代码,它用于在服务器端,而不是在客户端上使用
  • 客户端---包含适用于所有平台的客户端转储产生库
  • 工具---包含源代码和项目,生成在每个平台上的各种工具。

(在其他目录)

  • Windows Integration Guide Windows集成指南
  • Mac Integration Guide Mac的集成指南
  • Linux Integration Guide Linux集成指南

生成过程的详细资料(符号生成)

适用于所有平台。src/tools/{platform}/dump_syms是一个工具,可以读取每个平台的调试信息(例如,OS X / Linux操作系统,DWARF和STABS,以及Windows,PDB文件),和产生一个Breakpad的符号文件。应在二进制程序剥离符号之前(比如OS X/Linux)运行此工具,需要存储dump在处理器可以找到的地方。还有另一种工具,symupload,可以上传符号文件。如果你写了一个服务器,可以接收它们。

 

你可能感兴趣的:(Google Breakpad 之一,跨平台crash 处理上报系统简介)