栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

google

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

google

1 breakpad介绍

google_breakpad是一个由google主导的开源项目,官方介绍为:An open-source multi-platform crash reporting system,即 开源的多平台崩溃上报系统。
这是由google员工在工作中那20%的自由创造时间创造的作品,真正对技术热爱的人才会在自由时间改变世界,只完成工作的人永远只能做一把被人用完就丢的枪。

官方文档介绍:https://github.com/google/breakpad/blob/main/docs/getting_started_with_breakpad.md

2 支持

google breakpad 支持iOS linux windows,但是注意,不支持mingw64。

3 源代码

1 下载
下载地址:https://code.google.com/p/google-breakpad/ 访问不了请挂VPN
github地址:https://github.com/google/breakpad

2 项目源码结构 (主要在src的目录下)

build: 编译脚本client: 主要包括捕获以及dump代码common: 通用支持代码google_breakpad: breakpad使用的公共支持代码processor: 崩溃处理核心代码testing: 测试代码third_party: 第三方支持库tools: 一些小工具,用于处理dump文件和符号表 4 编译 4.1、window编译方法

参考链接: https://blog.csdn.net/a844651990/article/details/85316627

4.2、linuxu(buntu桌面)

下载源码后,执行下面命令:

./configure
qmake -j4
4.3、linux(嵌入式arm)
./configure --host=[arm-linux-gnueabihf]
qmake -j4

注: --host 携带参数根据平台使用的交叉编译做修改

5 使用 5.1 加入项目

使用动态库的方式加入项目,以qt为例,需要将编译好的动态库和头文件加入项目文件夹中,然后在项目的pro文件中添加代码,如下图所示:

5.2 函数调用
//添加头文件
#include "client/linux/handler/exception_handler.h"

//crash回调函数
static bool dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor,
                         void *context,
                         bool succeeded)
{
    Q_UNUSED(context)
    printf("Dump path: %sn", descriptor.path());
    return succeeded;
}

int main(int argc, char *argv[])
{
    // 加载崩溃信息捕获
    QString curDateTime = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");
    QDir dir(DMP_ROOT + curDateTime);
    if(!dir.exists())
    {
        dir.mkpath(DMP_ROOT + curDateTime);
    }
    google_breakpad::MinidumpDescriptor descriptor(QString(DMP_ROOT + curDateTime).toStdString());
    google_breakpad::ExceptionHandler eh(descriptor,
                                         NULL,
                                         dumpCallback,
                                         NULL,
                                         true,
                                         -1);
	//你的其他代码
    return a.exec();
}
5.3 dmp文件转可读文件

下文仅讲述linux下的操作。

1、使用dump_syms生成符号表:

dump_syms project > project.sym

注: project 为 运行程序

2、创建有层次的调试符号文件夹

查看文件层次

head -n1 project.sym

创建文件夹

mkdir -p ./symbols/project/ 5F5A4C932BFF6581E5AB30B67D9AA5180/ 

将project.sym拷贝到上一步骤文件夹下

cp project.sym symbols/project/ 5F5A4C932BFF6581E5AB30B67D9AA5180/

3、利用minidump_stackwalk分析dump文件

minidump_stackwalk f35daf9d-25a4-4706-d3f62d89-72d1b3c7.dmp ./symbols > result_f35daf9d.log

最终生成的result_f35daf9d.log就是可读文件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734480.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号