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

Google Breakpad:跨平台崩溃处理系统解析
本文介绍了Google的Breakpad工具,一个用于处理C/C++程序崩溃的跨平台系统,支持Windows、Linux、OS X和Android。Breakpad包括客户端库、符号卸载器和处理器三个组件,能生成minidump文件并转换为可读的堆栈轨迹。minidump格式紧凑且适合网络传输,避免了core文件的大小和格式问题。文章还详细讲述了minidump的生命周期、术语和集成指南。
部署运行你感兴趣的模型镜像

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,卡米诺,谷歌地球,和其他项目。

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目录下的以下目录结构:

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

(在其他目录)

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

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

 

您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值