`
happmaoo
  • 浏览: 4349744 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[Google Breakpad] 入门指南

阅读更多
= 介绍 =

Breakpad 既是一个函数库又是一个工具箱,它让你可以在发布应用程序给用户时移除编译器提供的调试信息,它会在一种简洁的"minidump"格式的文件中记录程序崩溃信息,并发送回你的服务器,而且可以从这些minidump文件中处理得到 C 和 C++ 堆栈记录(stack trace). Breakpad 也可以按要求给没有崩溃的程序写minidump文件.

Breakpad 正被 Google Chrome, Firefox, Google Picasa, Camino, Google Earth 和别的一些项目使用.

http://google-breakpad.googlecode.com/svn/wiki/breakpad.png

Breakpad 有三个主要部分:

 * 客户端(*client*) 是一个可以包含在程序中的库. 它可以把当前线程的状态和已装载的可执行库跟共享库的标识符写进minidump文件. 你可以配置客户端在程序崩溃时写一个minidump或只有显式要求时才写.

 * 符号清洁工(*symbol dumper*)是一个读取编译器产生的信息的程序,它能在读取后产生一个符号文件(*symbol file*),这个文件的格式是[Breakpad_SymbolFiles Breakpad自己的格式].

 * 处理器(*processor*)是也是一个程序,他读取minidump文件,并给minidump文件提到的可执行库和共享库找到合适的符号文件,然后产生一个可读的 C/C++ 堆栈记录.

= minidump文件格式 =

minidump文件格式类似于微软为崩溃上传功能(crash-uploading facility)开发的内核文件(core files). minidump 文件包含:

 * 一个在垃圾场(dump)创建时系统加载的可执行库和共享库的列表. 这个列表包含文件名和已装载版本的文件的标识符.

 * 当前进程中的线程列表. 对于每一个线程, minidump 文件包含了处理器的寄存器的状态和线程的堆栈内存. 这些数据是不能解读的字节流, 因为Breakpad 客户端一般没有可用的调试信息来产生函数名或行号,甚至识别堆栈框架的边界.

 * 收集到的创建垃圾场的系统的其他信息: 处理器、操作系统版本和垃圾场产生原因等等.

Breakpad 在所有平台上使用 Windows minidump 文件, 而不是传统的内核文件(core files), 有这些原因:

 * 内核文件会很大,这使得把它们通过网络传送到收集器端进行处理很不使用. Minidump 文件更小,因为它们就是为了这么用而设计的.

 * 核心文件格式不规范. 比如, Linux标准库(Linux Standards Base) 没有描述寄存器是如何存储在 `PT_NOTE` 段中的.

 * 与让别的机器写minidump文件相比,让windows机器处理核心会更难.

 * 它使 Breakpad 处理器简化到只需支持一种文件格式.

= minidump概观 =

minidump 是通过调用 Breakpad库产生的. 默认情况下,初始化Breakpad会安装一个异常/信号处理器,这个处理器会在异常出现时会写一个minidump文件到硬盘. 在 Windows 上, 这是通过`SetUnhandledExceptionFilter()`完成的; 在 OS X 上, 这是通过创建一个在Mach 异常端口的线程完成的; 在Linux 上, 这是通过安装多种异常(如`SIGILL, SIGSEGV`等)的信号处理句柄完成的.

在minidump文件产生后,每个平台都有稍微不同与其他平台的上传崩溃crash dump.  在 Windows和 Linux, 有一个独立的函数库可以调用去上传. 在 OS X, 如何设置好了,就会产生一个独立的进程,请求用户权限,然后发送这个文件.  

= 术语(Terminolog) =

*进程内(In-process) vs. 进程外(out-of-process)异常处理* - 一般认为在崩溃的进程中写minidump文件不安全- 关键进程数据结构会被破坏,或者异常处理句柄所在堆栈会被覆盖,等等。所有三个平台都支持进程外异常处理.

= 综合描述(Integration overview) =

== Breakpad 代码概观 ==

所有的客户端 代码都能通过访问在http://code.google.com/p/google-breakpad 上的Google 项目. 下面的目录结构在 src 目录中:

  * `processor` 包含了只在服务器端使用的 minidump处理代码
  * `client` 包含了所有平台的客户端产生minidump的函数库。
  * `tools` 包含了每个平台下编译一系列工具的源码和工程。

(在别的目录中)

  * <a href="http://code.google.com/p/google-breakpad/wiki/WindowsClientIntegration">Windows Integration Guide</a>

== 建立进程的细节(符号产生) ==

这可用于所有的平台。在`src/tools/{platform}/dump_syms` 中是一个可以读取各个平台下调试信息和产生Breakpad 符号文件的的工具(如 X/Linux的DWARF 和 STABS, Windows的PDB 文件),它还能产生一个Breakpad符号文件.  这个工具在剥离之前在运行(on your binary before it's stripped)(在OS X/Linux上) 而且符号文件要放在minidump 处理器可以找的到的地方.有另外一个工具, `symupload`,如果你写了可以接收它们的服务器,可以用来上传符号文件.
分享到:
评论

相关推荐

    Qt 使用GoogleBreakpad生成崩溃文件

    使用GoogleBreakpad源码编译成库,并在Qt使用。GoogleBreakpad的源码和vs2015编译好的库都在里面。

    GoogleBreakpad捕获崩溃文件需要的文件,包括lib库文件及头文件

    文件包含了使用GoogleBreakpad捕获崩溃文件需要的文件,包括lib及头文件,可以看我的博客里介绍了如何使用GoogleBreakpad生成dump文件,来分析程序崩溃原因。

    google breakpad

    从谷歌官方下载google breakpad,目前本人已经使用在Android平台,没有问题。

    VS2015编译的Google breakpad库

    VS2015编译的Google breakpad库。 Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合。 Breakpad由三个主要组件: client,以library的形式内置在你的应用中,当崩溃发生时写 minidump文件 symbol dumper,...

    Google Breakpad的dump自动解析脚本

    使用Google Breakpad产生异常dump文件后通常需要敲一堆命令,然后产生你要找的堆栈信息,这里提供的脚本直接运行如下命令crash.sh ./luncher /tmp/d23f8d5e-5832-45ac-da9a718d-7d847b15.dmp ,即可自动产生/tmp/d23...

    Google Breakpad 使用实例

    该文件使用VS 创建了一个实例来使用 Google Breakpad在程序崩溃时来生成dmp文件,让我们通过dmp文件能够发现问题所在。具体可以参看我的博客:http://blog.csdn.net/GoForwardToStep/article/details/56685810

    Google Breakpad源码

    Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Linux和Mac和Solaris。由于他本身跨平台,所以很大的减少我们在平台移植时的工作,毕竟崩溃转储,每个平台下都不同,使用起来很难统一...

    Google Breakpad 源代码

    试试Breakpad吧,无论你的程序运行在Windows平台,Mac OS X平台还是Linux平台,Breakpad都可以帮你截获程序崩溃那一刹那的重要信息。利用Breakpad,你可以在程序中加入自己的灾难响应装置,就像为程序加装安全气囊。...

    Google breakpad最新版

    Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合,是开源协议下发布的项目,目的在于捕捉各个系统平台下的C\C++开发的程序的崩溃详情。从而辅助修改bug。BreakPad支持的系统平台有:windows、linux、mac...

    Google Breakpad for Qt in Windows

    Google breakpad 项目在QT框架下的一个封装版本。这本是一个开源项目,本人只是修改了一下项目配置文件,以及及少数编译错误的代码,使之能够在Windows平台下编译通过。希望能够给各位喜爱Qt框架的程序员朋友们带来...

    Google Breakpad使用方法

    Google Breakpad

    GoogleBreakpad.zip

    Google Breakpad模块,VS2010编译成功,附带GoogleTest模块。

    已经完全编译好的Google breakpad

    在网上找了半天的编译教程,编译breakpad的时候统统报错。经过摸索,已经完全编译Google breakpad, 包里面已经生成了windows平台的相关文件,如: breakpad_client.sln build_all.vcxproj common.vcxproj

    google_breakpad 源码

    google_breakpad 源码,一个非常实用的跨平台的崩溃转储和分析模块,能够捕获程序崩溃报告,生成dump文件。具体可以见我的博客——Google Breakpad 在 windows下捕获程序崩溃报告。

    Google Breakpad的使用

    Google Breakpad的使用

    google_breakpad实例

    本资源是利用google breakpad开源项目做成的一个小实例,是刚着手研究此开源项目的绝佳的入手,在VS2008上面编译运行。下载下来编译即可运行,如有问题请联系

    google breakpad崩溃解析工具(已经编译过,可以直接使用)

    google breakpad崩溃解析工具(已经编译过,可以直接使用). 原下载地址:ttp://google-breakpad.googlecode.com/svn/trunk/

    google_breakpad工具.zip

    google_breakpad工具,包括windows、ubuntu、centos平台的解析工具 dump_syms.exe minidump_stackwalk.exe

    linux google breakpad

    linux google breakpad

Global site tag (gtag.js) - Google Analytics