说明:这是Chinese-house上的翻译,那儿还有更多
Breakpad 既是一个函数库又是一个工具箱,它让你可以在发布应用程序给用户时移除编译器提供的调试信息,它会在一种简洁的"minidump"格式的文件中记录程序崩溃信息,并发送回你的服务器,而且可以从这些minidump文件中处理得到 C 和 C++ 堆栈记录(stack trace). Breakpad 也可以按要求给没有崩溃的程序写minidump文件.
Breakpad 正被 Google Chrome, Firefox, Google Picasa, Camino, Google Earth 和别的一些项目使用.
Breakpad 有三个主要部分:
minidump文件格式类似于微软为崩溃上传功能(crash-uploading facility)开发的内核文件(core files). minidump 文件包含:
Breakpad 在所有平台上使用 Windows minidump 文件, 而不是传统的内核文件(core files), 有这些原因:
minidump 是通过调用 Breakpad库产生的. 默认情况下,初始化Breakpad会安装一个异常/信号处理器,这个处理器会在异常出现时会写一个minidump文件到硬盘. 在 Windows 上, 这是通过SetUnhandledExceptionFilter()完成的; 在 OS X 上, 这是通过创建一个在Mach 异常端口的线程完成的; 在Linux 上, 这是通过安装多种异常(如SIGILL, SIGSEGV等)的信号处理句柄完成的.
在minidump文件产生后,每个平台都有稍微不同与其他平台的上传崩溃crash dump. 在 Windows和 Linux, 有一个独立的函数库可以调用去上传. 在 OS X, 如何设置好了,就会产生一个独立的进程,请求用户权限,然后发送这个文件.
进程内(In-process) vs. 进程外(out-of-process)异常处理 - 一般认为在崩溃的进程中写minidump文件不安全- 关键进程数据结构会被破坏,或者异常处理句柄所在堆栈会被覆盖,等等。所有三个平台都支持进程外异常处理.
所有的客户端 代码都能通过访问在
(在别的目录中)
这可用于所有的平台。在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,如果你写了可以接收它们的服务器,可以用来上传符号文件.