[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`,如果你写了可以接收它们的服务器,可以用来上传符号文件.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt是一种用于开发跨平台图形用户界面的框架,Google Breakpad是一种开源的异常报告库。要下载qt google breakpad,首先需要在Qt官方网站上下载Qt框架的安装包。在官网上选择对应的操作系统(例如WindowsLinux,Mac等),然后选择所需的Qt版本(例如Qt5,Qt6等)。下载完成后,运行安装包并按照安装向导的指示进行安装。安装完成后,可以在系统中找到Qt的安装目录。 然后,需要在Google Breakpad的官方网站上下载Breakpad的源代码。在官网上找到源代码下载页面,并选择所需的版本。下载完成后,解压缩文件并进入源代码的目录。 接下来,需要将Breakpad源代码与Qt框架进行配置和构建。通过命令行进入Breakpad源代码目录,在该目录下创建一个新的构建目录,并进入该目录。使用CMake命令来配置Breakpad与Qt的构建。具体的配置命令根据不同的操作系统和需求而定。配置完成后,使用make或ninja等构建工具进行构建。 构建完成后,将生成的Breakpad库文件(如libbreakpad.so或breakpad.dll等)与Qt应用程序进行链接。可以在Qt应用程序的.pro文件中添加链接库的配置,或者在构建命令中进行链接。完成链接后,重新编译和运行Qt应用程序即可使用Google Breakpad进行异常报告的捕获和处理。 综上所述,下载Qt和Google Breakpad的过程包括下载Qt框架安装包、下载Breakpad源代码、配置和构建Breakpad与Qt的链接,并在Qt应用程序中使用Breakpad进行异常报告的处理。 ### 回答2: QT是一款强大的跨平台应用开发框架,Google Breakpad是一套用于应用程序崩溃报告的开源工具。想要在QT中下载Google Breakpad,可以按照以下步骤进行操作。 首先,在浏览器中搜索"Google Breakpad"并进入官方网站或GitHub页面。在该页面中,可以找到相关的下载链接和文档。 其次,根据自己的操作系统选择合适的版本下载。Google Breakpad支持多种操作系统,如WindowsLinux和Mac OS X等。选择与QT兼容的版本进行下载。 下载完成后,解压缩下载的文件。其中包含了Google Breakpad的源代码和示例程序等。 接下来,可以根据Google Breakpad提供的文档和示例程序进行学习和使用。文档中详细介绍了Google Breakpad的使用方法和参数设置等。 最后,根据QT的需求,将Google Breakpad集成到QT应用程序中。通过在QT项目中引入Google Breakpad的代码和相关文件,可以实现应用程序的崩溃报告和分析功能。 总之,下载并集成Google Breakpad到QT中可以帮助开发者更好地追踪和分析应用程序的崩溃问题,提高应用程序的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值