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

news/2024/11/29 6:42:12/

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);


http://www.ppmy.cn/news/382859.html

相关文章

视频剪辑需要学哪些软件 视频剪辑在哪里学

视频剪辑涉及到素材准备、视频的编辑与生成、格式的转换等方面,因此需要学习到的软件类型也不少。比如在准备素材时,可能会涉及到音频、图片等处理,以及特效的应用等。接下来,就让我们详细了解下视频剪辑需要学哪些软件&#xff0…

逆元(费马小定理、扩展欧几里得、逆元线性打表)

逆元 逆元应用与证明费马小定理方法扩展欧几里得求逆元这里给出扩展欧几里得算法的模板代码: 打表求逆元逆元打表求1!~n! 逆元应用与证明 在学习逆元之前我们先来了解一下同余的概念: 简单来讲就是整数a mod(m)b mod(m) ,写做 a …

ubuntu 安装网卡驱动

ubuntu 安装网卡驱动 查看当前网卡 # 首先 查看当前所有的 网卡, ifconfig -a # 一定要加 -a (表示all) # 若有显示,说明识别成功,再查看目前已经启动的网卡有没有 ifconfig # 查看目前启动的网卡 (防止识别到了硬件,但没有启动,热插拔未启动的现象)下载相应的驱动 #…

Win10查看网卡驱动的方法

Win10电脑中的网卡驱动出现问题,可以试试卸载重装网卡驱动的方法,那么Win10网卡驱动在哪找呢?下面小编就给大家介绍一下Win10查看网卡驱动的方法,简单几步即可完成。 Win10网卡驱动位置在哪? 1、右击桌面的此电脑&…

台式计算机网卡在哪里查看,网卡驱动在哪里查看,教您如何查看电脑网卡驱动...

一些对电脑还不是很了解的用户问小编,为什么在电脑装完系统后,有时电脑连不上网,是不是没有安装好呢?有或者在安装系统的过程中忘了操作哪一步还是哪个选项选错了呢?要不要重装过系统呢?面对这一连串的疑问…

Java问题二十道

问题 1:什么是Java?它有哪些特点? 答案:Java是一种面向对象的编程语言,具有以下特点: 简单性:Java语法相对简单,易于学习和使用。 面向对象:Java支持面向对象的编程范式…

网卡驱动无法安装怎么办?

最近有用户反映这个问题,没有网卡驱动就没办法上网,安装的时候发现一直安装不上,这是怎么回事呢?针对这一问题,本篇带来了详细的Win7系统网卡驱动无法安装的解决方法,快来看看。 1、最先在桌面,…

debian安装网卡驱动

debian安装网卡驱动 1、安装完debian的时候,你会发现根本就上不了网,你的网卡还没有驱动,所以你也就不用想能apt-get instal ** 2、找一台能上网的机器,到这个地方下载一个bpo包: http://backports.debian.org/debian-…