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

news2025/2/13 20:27:11

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.coloradmin.cn/o/645451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言之实用调试技巧(2)

如何写出好(易于调试)的代码 优秀的代码: 1. 代码运行正常 2. bug很少 3. 效率高 4. 可读性高 5. 可维护性高 6. 注释清晰 7. 文档齐全 常见的 coding 技巧: 1. 使用assert 2. 尽量使用const 3. 养成良好的编码风格 4. …

Linux防火墙学习笔记14

firewalld是什么? Firewalld属于动态防火墙,是CentOS7系统中用于对netfilter内核模块用户空间管理工具。 Firewalld仅仅代替了iptables service部分,其底层还是使用iptables作为防火墙规则管理工具。 Firewalld中zone概念及作用&#xff1…

盖茨预言AI助理成标配,AI+RPA打破AI准入高门槛!

根据微软联合创始人比尔盖茨的预测,未来顶级的人工智能公司将会开发一种全新的“个人AI助理”。比尔盖茨表示,“个人AI助理”将会具有出色的功能,可以改变人们的生活方式以及工作方式。无论哪一家公司能够赢得AI助理竞争先机,都会…

耗时半月,终于把CSDN上的Java面试八股文整理成了PDF合集(Java基础+Redis+MySQL+多线程与高并发+JVM+分布式+Spring+微服务)

大家好,最近有不少小伙伴在后台留言,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些程序员了。 这不&#xf…

Android:OKHttp

特点 支持HTTP2/SPDYSocket自动选择最好路线,并支持自动重连拥有自动维护的Socket连接池,减少握手次数拥有队列线程池,轻松写并发拥有Interceptors轻松处理请求与响应(比如透明GZIP压缩)实现基于Headers的缓存策略 基…

JDBC Apache—DBUtils 详解(通俗易懂)

目录 一、前言 二、Apache—DBUtils的引入 1.传统使用ResultSet的缺点 : 2.改进方法 : 3.改进方法的模拟实现 : 三、Apache—DBUtils的使用 1.基本介绍 : 2.准备工作 : 3.DBUtils查询(DQL) : 4.query方法源码分析 : 5.DBUtils处理(DML) : 四、总结 一、前言 第六节…

Web3下的去中心化契约

随着Web3的兴起,智能合约成为了这一新兴领域中最为重要的概念之一。智能合约是一种在区块链上执行的可编程代码,其作用类似于传统世界中的合约,但具有更多的灵活性和安全性。本文将介绍智能合约的基本概念、工作原理以及在Web3下的应用场景。…

如何提取视频里面的音频?简单三个方法即可完成!

分享3个简单易上手的视频提取音频方法,这些方法可以帮助你单独提取保存视频中的人物对话音频内容和背景音乐,并且提取成功的音频文件还可用于其他视频创作。 方法一:PR提取音频 Adobe Premiere Pro(简称PR)不仅可以用…

番外篇2 离线服务器 环境安装与配置

(离线远程服务器旧版torch的卸载与安装问题) Step4: 查看自己是否已经成功安装了Anaconda,输入此命令conda --version -------------------------------------------------------------------------------------------------------- Step1:离线创建con…

为什么浏览器突然打不开网页了?

苏生不惑第433 篇原创文章,将本公众号设为星标,第一时间看最新文章。 前几天写了什么是cookie总有人问我 Cookie 是什么?,说到Charles代理工具,但是为什么关了它就打不开网页呢?今天来说说这个。 Charles可…

企企通联合创始人兼总架构师杨华:剖析SRM顾问长期主义项目实践

近日,国产大飞机C919商业首飞成功引起广泛关注,此后,我们的出行选择中新增了一项“自己国家的大飞机”,给国人带来了更多的期待和自豪。 走难而正确的路,国产大飞机C919从项目立项到“一飞冲天”,花了十六年…

激活函数ReLU和SiLU的区别

文章目录 前言ReLU(Rectified Linear Unit)Leaky ReLUFReLU(Flatten ReLU)SiLU(Sigmoid Linear Unit)总结 前言 在这里,我就简单写一下两个激活函数的概念以及区别,详细的过程可以看…

2023年新风口,抖音的产业带服务商招募?怎么开通?

抖音电商致力于成为用户发现并获得优价好物的首选平台。众多抖音创作者通过短视频/直播等丰富的内容形式,给用户提供更个性化、更生动、更高效的消费体验。抖音电商积极引入优质合作伙伴,为品牌发展、商家变现提供多元的服务。 抖音产业带服务商招募区域…

操作系统常识

4.进程同步 1.什么是临界区?什么是临界资源 在计算机系统中,临界资源指的是被多个并发执行的线程或进程共享访问的某个资源,如共享内存区、共享文件等。 临界区指的是访问临界资源的那部分代码片段,它是一段需要保护的代码区域…

项目管理工具究竟能否提升效率?看看它们的作用和优势

随着各种类型的项目不断涌现,项目管理工具在现代社会变得越来越重要。作为一个项目经理,需要确保项目在时间和预算方面得到控制,并且达成预期的效果。在这个过程中,项目管理工具可以带来很多帮助。 首先 项目管理工具可以为项目经…

推动绿色计算 共迎绿色未来|2023开放原子全球开源峰会绿色基础设施技术分论坛圆满收官

6 月 11 日,2023 开放原子全球开源峰会绿色基础设施技术分论坛圆满举行。蚂蚁集团 4 位专家带来了蚂蚁在探索打磨“绿色计算”实践中的核心技术领域一线观察。 蚂蚁集团高级技术专家、数据中间件负责人李玉明 李玉明分享了《开源分布式事务框架 Seata 以及其在金融…

电商--抢购架构总结

文章目录 背景业务流程业务难点技术难点技术方案技术方向具体落地客户端流控网关流控容器流控后端接口流控数据库流控 流控总结优化读取加速异步化流程处理系统扩容 压测监控 总结参考文献 背景 这是个在做NFT电商项目时遇到的场景,要求运营可以商家某个系列的NFT商…

顺序栈与链栈

简介 栈和队列是两种重要的线性结构。从数据结构角度看, 栈和队列也是线性表, 其特殊性在于栈和队列的基本操作是线性表操作的子集, 它们是操作受限的线性表。 栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。 因此, 对…

计算字母出现次数【存在括号计算】

计算字母出现次数【存在括号计算】 此代码考虑到了本问题的大多可能情况,闲话少述,代码中的注释很丰富。 代码绝对可以解决你的问题! 不行你就评论,回复速度超快 作者时间YaoChongChong2023年6月14日10:40 Descript…

T8151B T8310 T8311罗克韦尔自动化可信通信接口

​ T8151B T8310 T8311罗克韦尔自动化可信通信接口 T8151B T8310 T8311罗克韦尔自动化可信通信接口 DCS控制器正反作用怎么判断? dcs控制器的正反作用可以在工程师站更改,比如中控系统那就在工程师站的操作界面把控制系统上的调节阀位号点开就会有正反作…