基于Google breakpad编译构建和使用案例

Googlepad是一款用于程序崩溃时自动生成转储文件(.dmp)的可跨平台开源库。

1.Googlepad代码下载地址:

 git clone https://chromium.googlesource.com/breakpad/breakpad

如果翻不了墙可以在gitee上下载breakpad模块。

2.Googlepad采用gyp来实现构建管理(语法与CMAKE差不多)

gyp工具下载地址:

git clone https://chromium.googlesource.com/external/gyp

如果翻不了墙可以在gitee上下载gyp模块。

gyp是Python代码,提供了gyp.bat供Windows下使用;gyp脚本供Linux下使用。

gyp不需要编译只需要配置环境变量。下图为Windows下配置gyp的PATH环境变量。

 

3.gyp打包需要Python2.X的支持。推荐Python2.7(python-2.7.18.amd64.msi)。

Python环境下载地址:Download Python | Python.org

Python安装可参照网上教程,或者直接下一步。安装完成或配置环境变量。

4.Googlepad依赖于GoogleTest,需将GoogleTest源码下的googlemock和googletest两个子文件夹拷贝到googlepad/src/testing目录下。

 

5.准备工作就绪后(Python2.7已安装,环境变量配置好,源码下载移植完毕)就可以使用gyp来实现构建代码生成工程文件。

Windows操作系统下:

预先安装了Virtual Studio2019。

打开cmd窗口,cd进入breakpad\src目录,然后执行以下命令:

gyp.bat --no-circular-check client\windows\breakpad_client.gyp

 

用VS2019打开解决方案

修改client_tests工程的属性 c++--》常规--》将警告视为错误改成“否”。

凡是编译过程遇到错误可都修改工程的属性。

也可根据自己需要选择MD MT MDD MTD。

 

最终可执行文件和生成的二进制如下所示:

 

下画红线的是需要在使用工程依赖的库文件。

此时可以进行测试。运行crash_generation_app.exe触发点击Client下的任一崩溃。

 

从源代码可知会在c:\dumps下生成崩溃转储文件.dmp。

6.dmp文件进行跟踪定位,可以用VS工具(需要预先装,所占空间比较大),也可以用Windbg来调试。正在上传…重新上传取消

Windbg使用步骤:

  1. 加载pdb描述符标识文件;File--》symbol file path --》Browser选择崩溃程序的pdb调试文件。

 

 

  1. 加载源代码文件;File--》Source file path --》Browser选择崩溃程序的源代码文件夹(工程的顶层文件)。

 

  1. 打开crash产生的.dmp文件。File--》Open crash dump --》选择生成的dmp文件。

 

  1. 输入!analyze -v查看语法分析详情。

 

可以知道出错的文件和方法名,及大概的错误方向。

输入kv可以看出当前堆栈情况。

 

摘抄一段:crash_generation_app!google_breakpad::DerefZeroCrash+0x2 (Inline Function @ 00007ff6`31ed1ea2) [D:\git\breakpad_build\src\client\windows\tests\crash_generation_app\crash_generation_app.cc @ 318]

可知崩溃时运行文件路径、文件名、方法名、行数318。

看一下代码:

 

VS调试dump文件网上也有很多讲解。

1.File-->打开-->文件打开崩溃转储文件。

 

2.设置符号路径

 

解决方案资源管理器配置源代码。如果没有出现解决方案资源管理器可以在视图里找

3.点击解决方案--》属性--》调试源文件,新增工程源码文件夹。

点击“使用 仅供本机 进行调试”。耐心等待加载完毕(此过程非常慢,建议windbg)。

 

 //实践//

QT中使用案例:Windows下基于MSVC

因为编译的Google BreakPad是采用MT方式的,所以.pro文件需对构建方式进行指定。

新建了头文件include文件夹,依赖库lib文件夹。

CONFIG(debugdebug|release) {

    QMAKE_CXXFLAGS_DEBUG += /MTd

}

CONFIG(release, debug|release) {

    QMAKE_CXXFLAGS_RELEASE += /MT

}

INCLUDEPATH += $$PWD/include/breakpad

win32:CONFIG(release, debug|release): {

LIBS += -L$$PWD/lib/x64/release/ -lcommon

LIBS += -L$$PWD/lib/x64/release/ -lcrash_generation_client

LIBS += -L$$PWD/lib/x64/release/ -lexception_handler

}

else:win32:CONFIG(debugdebug|release): {

LIBS += -L$$PWD/lib/x64/debug/ -lcommon

LIBS += -L$$PWD/lib/x64/debug/ -lcrash_generation_client

LIBS += -L$$PWD/lib/x64/debug/ -lexception_handler

}

else:unix: LIBS += -L$$PWD/lib/x64/ -lcommon

INCLUDEPATH += $$PWD/lib/x64/release

DEPENDPATH += $$PWD/lib/x64/release

//需要引入头文件

#include "client/windows/handler/exception_handler.h"

代码集成//

 //测试 Google  breakpad 终端

    google_breakpad::ExceptionHandler *processDump =

            new google_breakpad::ExceptionHandler(

                std::wstring(L"c:/Dumps"), nullptr,

                nullptr,nullptr,

                google_breakpad::ExceptionHandler::HANDLER_ALL,

                nullptr);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值