Google breakpad实战

使用Google breakpad,优点是跨平台,开源。原理图如下:


1.下载breakpad源码,build源码:
./configure LDFLAGS=-static-libstdc++
make
2.在App程序中调用异常处理构造函数,示例如下:
vi test.cpp

#include "client/linux/handler/exception_handler.h"
#include <cstdlib>


using namespace std;


void crash()
{
  volatile int* a = (int*)(NULL);
  *a = 1;
}


int main(int argc, char* argv[])
{
  google_breakpad::MinidumpDescriptor descriptor("/tmp");
  google_breakpad::ExceptionHandler eh(descriptor,
                                       NULL,
                                       NULL,
                                       NULL,
                                       true,
                                       -1);
  crash();
  return 0;
}

3.编译App程序时,需要链接breakpad_client.a静态库,而且需要加上-g选项。
g++ -g test.cpp -o test -L./src/client/linux/ -lbreakpad_client -I./src -static-libstdc++ -lpthread


4.使用breakpad的工具dump_syms导出符号信息到文件,并保存到具有特定的目录下:
#./src/tools/linux/dump_syms/dump_syms test > test.sym
#head -n1 test.sym
MODULE Linux x86_64 FDF0EFD5614DA1F9F64B0EBF23C3B4CC0 test
#mkdir -p ./symbols/test/FDF0EFD5614DA1F9F64B0EBF23C3B4CC0
#mv test.sym ./symbols/test/FDF0EFD5614DA1F9F64B0EBF23C3B4CC0

5.发布给用户使用的App程序,需要使用strip命令去掉符号信息:
strip test

6.运行的App如果发生异常,会在设置的目录下生成minidump文件,例如:
/tmp/5a880b31-606f-e4f6-11628802-48254e81.dmp

7.可以将产生的minidump文件发回到服务端,再加上之前产生的符号信息文件,就可以使用breakpad的工具查看堆栈信息了,如下:
[root@localhost google-breakpad]# ./src/processor/minidump_stackwalk /tmp/5a880b31-606f-e4f6-11628802-48254e81.dmp ./symbols/
......
2015-08-13 10:17:07: minidump_processor.cc:301: INFO: Processed /tmp/4e6858c1-bc7f-3d47-36fcaf47-42538c85.dmp
Operating system: Linux
                  0.0.0 Linux 2.6.18-406.el5 #1 SMP Tue Jun 2 17:25:57 EDT 2015 x86_64
CPU: amd64
     family 6 model 60 stepping 3
     4 CPUs


Crash reason:  SIGSEGV
Crash address: 0x0
Process uptime: not available


Thread 0 (crashed)
 0  test!crash [test.cpp : 9 + 0x4]
    rax = 0x0000000000000000   rdx = 0x00000000006733e0
    rcx = 0x0000000000000000   rbx = 0x000000331fe1cbc0
    rsi = 0x0000000000000000   rdi = 0x00000000006733e0
    rbp = 0x00007fff3ed76170   rsp = 0x00007fff3ed76170
     r8 = 0x0000000000000000    r9 = 0x0000000000000000
    r10 = 0x0000000000000000   r11 = 0x0000003320c0a150
    r12 = 0x0000000000000000   r13 = 0x00007fff3ed76360
    r14 = 0x0000000000000000   r15 = 0x0000000000000000
    rip = 0x0000000000405b96
    Found by: given as instruction pointer in context
 1  test!main [test.cpp : 21 + 0x5]
    rbx = 0x000000331fe1cbc0   rbp = 0x00007fff3ed76280
    rsp = 0x00007fff3ed76180   r12 = 0x0000000000000000
    r13 = 0x00007fff3ed76360   r14 = 0x0000000000000000
    r15 = 0x0000000000000000   rip = 0x0000000000405c41
    Found by: call frame info
 2  libc-2.5.so + 0x1d9f4
    rbx = 0x000000331fe1cbc0   rbp = 0x0000000000000000
    rsp = 0x00007fff3ed76290   r12 = 0x0000000000000000
    r13 = 0x00007fff3ed76360   r14 = 0x0000000000000000
    r15 = 0x0000000000000000   rip = 0x000000332001d9f4
    Found by: call frame info
 3  test!crash [test.cpp : 10 + 0x2]
    rsp = 0x00007fff3ed762b0   rip = 0x0000000000405b9e
    Found by: stack scanning
 4  0x331fe1cbc0
    rbp = 0x0000000000405b9e   rsp = 0x00007fff3ed762b8
    rip = 0x000000331fe1cbc0
    Found by: call frame info


Loaded modules:
0x00400000 - 0x0046efff  test  ???  (main)
0x331fc00000 - 0x331fc1bfff  ld-2.5.so  ???
0x3320000000 - 0x3320353fff  libc-2.5.so  ???  (WARNING: No symbols, libc-2.5.so, BF430E6A87B9E3605BB193A215F1C9470)
0x3320800000 - 0x3320a82fff  libm-2.5.so  ???
0x3320c00000 - 0x3320e17fff  libpthread-2.5.so  ???
0x3331600000 - 0x333180dfff  libgcc_s-4.1.2-20080825.so.1  ???
0x7fff3edfd000 - 0x7fff3edfffff  linux-gate.so  ???
2015-08-13 10:17:07: minidump.cc:4169: INFO: Minidump closing minidump

### 回答1: Qt是一种用于开发跨平台图形用户界面的框架,Google Breakpad是一种开源的异常报告库。要下载qt google breakpad,首先需要在Qt官方网站上下载Qt框架的安装包。在官网上选择对应的操作系统(例如Windows,Linux,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支持多种操作系统,如Windows、Linux和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、付费专栏及课程。

余额充值