Google Breakpad 之一,跨平台crash 处理上报系统简介

2023-05-16

C/C++程序最棘手的时候就是一个字“挂”,总是经常和不经常的挂掉,尤其是那些线上的不经常挂的情况,光看日志定位问题真的很难。

为解决C挂挂的问题,有必要提供一个跨平台的crash处理系统,目前已知的支持平台有windows 、Linux、 OS X 、android、等待。

下面就来看看Google自己用的系统:Breakpad

最好的介绍莫过于谷歌自己的:

谷歌的介绍:http://code.google.com/p/google-breakpad/wiki/GettingStartedWithBreakpad

谷歌翻译-》本人修改版:(不一定准确)minidump-》小型转储

介绍

 Breakpad是一个库和工具套件可以让你发布的应用程序(把编译器提供的调试信息剥离掉的)给用户,记录了崩溃紧凑的“dump”文件,发送回您的服务器,并从这些minidump产生C和C++堆栈踪迹。Breakpad可以根据请求使没有崩溃的程序也可以写出minidump。

目前使用Breakpad的有谷歌浏览器,火狐,谷歌的Picasa,卡米诺,谷歌地球,和其他项目。

Breakpad有三个主要组件:

  • 客户端是一个库,包含在您的应用程序中。 它可以获取当前线程的状态和当前加载的可执行文件和共享库的ID写转储文件。您可以配置客户端发生了崩溃时写入一个minidump时,或明确要求时。
  •  符号卸载器是一个程序,读取由编译器产生的调试信息,并生成一个使用Breakpad格式的符号文件  。
  • 处理器(minidump processor)是一个程序,读取一个minidump文件,找到相应的版本的符号文件的(可执行文件和共享库的转储提到的),并产生了一个人可读的C / C + +堆栈跟踪。

小型转储文件格式(即minidump)

转储文件的格式是由微软开发的类似存储的文件,崩溃便利上传。一个minidump文件包含:

  • 在创建dump的进程中加载​​的可执行文件和共享库列表。此列表中包含的特定版本加载的那些文件的文件名和标识符。
  • 在这个过程中存在的线程列表。对于每个线程转储包括处理器寄存器的状态,线程的堆栈存储器的内容。一般Breakpad客户端没有可用于产生函数名或行号,甚至确定堆栈帧的边界的调试信息,所以这些数据是不可解释的字节流。
  • 其他收集的有关系统转储信息比如:处理器和操作系统版本,转储的原因,等等。

 Breakpad在所有平台上使用Windows dump文件,而不是传统的core文件,有以下几个原因:

  • core文件可能会非常大,不适合在网络上发送给收集器处理。minidump较小,因此它们被设计为使用这种方式。
  • core文件格式缺乏文档信息。例如,Linux标准库不描述寄存器如何存储在PT_NOTE段的。
  • 一个Windows机器上生成一个core dump文件,比起其他机器上生成一个minidump文件,哪个难很难说。
  • 简化了Breakpad处理器,只支持一种文件格式。

概述/一个小型转储的生命周期

通过调用到Breakpad库生成一个minidump。默认初始化Breakpad时,安装了一个异常/信号handler,崩溃时可写一个minidump到磁盘。在Windows上,这是通过SetUnhandledExceptionFilter()实现;在 OS X上,这是通过创建一个线程,等待的Mach exception端口,在Linux上,这是通过安装一个信号handler来应对程序的各种异常情况,如SIGILL,SIGSEGV等。

一旦生成minidump,每个平台都有一个略有不同的方式上传的崩溃dump。在Windows和Linux上,提供一个单独的函数库,可以被称为做upload。在OS X上,一个单独的进程产生,提示用户是否允许,如果同意这样做则发送文件。

术语

进程内与进程外的异常处理——进程内写minidump通常被认为是不安全的,关键处理数据结构可能已经被破坏,异常处理程序运行所处的堆栈或可能已经被覆盖,等等。所有3个平台都支持“进程外”异常处理。

集成概述

Breakpad代码概述

所有的客户端代码访问谷歌计划在http://code.google.com/p/google-breakpad 。 是src目录下的以下目录结构:

  • 处理器---包含转储处理的代码,它用于在服务器端,而不是在客户端上使用
  • 客户端---包含适用于所有平台的客户端转储产生库
  • 工具---包含源代码和项目,生成在每个平台上的各种工具。

(在其他目录)

  • Windows Integration Guide Windows集成指南
  • Mac Integration Guide Mac的集成指南
  • Linux Integration Guide Linux集成指南

生成过程的详细资料(符号生成)

适用于所有平台。src/tools/{platform}/dump_syms是一个工具,可以读取每个平台的调试信息(例如,OS X / Linux操作系统,DWARF和STABS,以及Windows,PDB文件),和产生一个Breakpad的符号文件。应在二进制程序剥离符号之前(比如OS X/Linux)运行此工具,需要存储dump在处理器可以找到的地方。还有另一种工具,symupload,可以上传符号文件。如果你写了一个服务器,可以接收它们。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Breakpad 之一,跨平台crash 处理上报系统简介 的相关文章

  • 创建Vue项目报HADOOP_CONF_DIR错解决方法

    创建Vue项目报错解决方法 创建Vue ui项目时终端报错 xff1a ERROR Failed to get response from No HADOOP CONF DIR set Please specify it either sp
  • android调试常见问题(持续更新)

    1 jni调用时出现以下错误 failed dlopen failed cannot locate symbol rand referenced by xxx 通常是ndk编译的平台太低导致 打开jni的Application mk 修改里
  • 大数据系列 | 解决Hadoop不能打开端口8088的网页问题(50070可以打开)

    解决Hadoop不能打开端口8088的网页问题 50070可以打开 原因 xff1a 本地hosts文件没有添加集群ip集群环境没有开放8088端口hadoop的配置文件yarn site xml问题 解决方法 xff1a 首先检查一下使用
  • Vue2前端请求API数据跨域问题解决

    Vue2前端请求API数据跨域问题解决方法 前端 xff1a Vue2 接口使用 xff1a API 问题报错提示 xff1a Access to XMLHttpRequest at span class token string 39 h
  • vmware虚拟机ubuntu18.04桌面版安装教程

    vmware虚拟机ubuntu18 04桌面版安装教程 一 安装环境 xff1a VMware Workstation xff1a 15 5Pro Ubuntu xff1a 18 04桌面版 二 安装教程 xff1a 创建虚拟机 选择 自定
  • Python系列 | Turtle绘图学习之羽毛球随机点训练场

    绘图之前先要安装turtle模块 xff1a python 2 xff1a pip install turtle python 3 pip3 install turtle 绘图思路 xff1a 首先绘制出外正方形和内线 xff0c 然后使用
  • 大数据系列 | 全国职业院校技能大赛大数据应用技术赛项笔记分享-离线抽取模块

    离线数据抽取 写在前面 xff1a 此笔记是本人在备战2022年大数据赛项整理出来的 xff0c 不涉及国赛涉密内容 xff0c 如点赞收藏理想 xff0c 我将会把所有模块的笔记开源分享出来 xff0c 如有想询问国赛经验的可以关注私聊我
  • C语言系列 | 简单题练习

    第一题 xff1a 简易计算器 思路 xff1a 定义变量后使用while无限循环执行 xff0c 使用switch语句实现多分支选择 源代码 xff1a span class token macro property span class
  • Python系列 | 基于Requests和PyEcharts实现爬取博客数据可视化大屏分析

    博客数据分析大屏可视化实现的效果 xff1a 一 核心功能设计 学习笔记分享 xff1a 博客作者数据分析实现的思路大致为爬虫 用户通过控制台输入用户博客地址和博客文章地址 和大屏可视化展示两方面 接下来我们可以通过以下几步实现需求 xff
  • C++ 引用 乱七八糟的总结

    1 什么是 引用 xff1f 申明和使用 引用 要注意哪些问题 xff1f 引用就是某个目标变量的 别名 alias xff0c 对应用的操作与对变量直接操作效果完全相同 申明一个引用的时候 xff0c 切记要对其进行初始化 引用声明完毕后
  • 麻将胡牌算法(查表法 和 拆解法)

    1 查表法计算麻将胡牌 原理 http hp vector co jp authors VA046927 mjscore mjalgorism html 2 跟拆解法对比进行效率比较 package main import 34 fmt 3
  • FreeRTOS第一步:创建多任务

    目录 单片机裸机开发与基于操作系统开发 FreeRTOS介绍 创建多任务 SRAM 动态内存 一 动态内存空间的堆从哪里来 xff1a 二 定义任务函数 xff1a 三 定义任务栈 xff1a 四 定义任务控制块指针 xff1a 五 动态创
  • Android studio 使用记录

    一 常用技巧 1 代码格式化 Code gt Reformat Code 2 自动删除多余的import Code gt Optimize imports 3 从工程中查找某个字符串 Edit gt Find gt Find in path
  • 嵌入式C语言基础知识 -- 函数指针&回调函数&结构体指针

    目录 一 函数指针 xff1a 什么是函数指针 xff1f 函数指针的三种定义方式 xff1a xff08 1 xff09 先定义出函数的类型 xff0c 再通过类型定义函数指针变量 xff08 2 xff09 先定义出函数指针的类型 xf
  • 常见的SSL证书错误代码及解决方法

    有时候SSL证书明明安装了 xff0c 但是为什么不出现绿色小锁呢 xff1f 浏览器总是报错 xff0c SSL证书明明已经安装好了 xff0c 怎么突然访问不显示绿色安全锁呢 xff1f 针对这些问题 xff0c 整理出一些常见的SSL
  • Tomcat 8.5和Tomcat 9安装SSL证书的教程

    第一步 xff1a 准备好所需要的证书文件 xff0c Tomcat8 5和Tomcat9部署ssl证书一般使用JKS文件 xff0c 如果有Pem和key文件 xff0c 也需要合成JKS文件 第二步 xff1a 打开tomcat配置文件
  • 浅谈人工智能(AI)

    人工智能 AI 一 人工智能简介 1 1 人工智能定义和发展历史 人工智能 xff08 Artificial Intelligence xff09 xff0c 英文缩写为AI 它是研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术及应
  • 睿智的目标检测31——非极大抑制NMS与Soft-NMS

    注意事项 Soft NMS对于大多数数据集而言 xff0c 作用比较小 xff0c 提升效果非常不明显 xff0c 它起作用的地方是大量密集的同类重叠场景 xff0c 大量密集的不同类重叠场景其实也没什么作用 xff0c 同学们可以借助So
  • ubuntu18.04 安装Pangolin

    按照Github上面的教程走即可 xff0c 非常简单 https github com stevenlovegrove Pangolin 首先要安装一些必要的库 Glew xff1a sudo apt get install libgle
  • freertos 学习 资源整理

    1 freertos 官方网站 freertos 官方网站 https www freertos org index html 源码下载 xff1a https sourceforge net projects freertos 2 如何下

随机推荐

  • openwrt: ipq4019 路由 资料汇总

    参考网站 https openwrt org 代码 https github com openwrt openwrt releases tag v18 06 1 wget https github com openwrt openwrt a
  • IT行业ToB销售为什么这么难

    IT行业ToB销售为什么这么难 华东企业服务IT圈 4天前 背景 xff1a 笔者IT行业从业14年 xff0c 干过售后 售前 销售 创过业 xff0c 属于那种基本出去拜访客户不需要售前那种 xff0c 复杂的技术方案自己操刀才放心 x
  • 【Linux编程】守护进程(daemon)详解与创建

    本文主要参考自 xff1a linux系统编程之进程 xff08 八 xff09 xff1a 守护进程详解及创建 xff0c daemon 使用 一 概述 Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于
  • Android studio svn使用方法

    步骤 一 设置忽略文件 可参考工程目录下的 gitignore文件 iml DS Store externalNativeBuild local properties idea libraries idea modules xml idea
  • linux lsusb命令的安装及简单使用

    在 Linux 中我们可以使用 lsusb 来列出 USB 设备和它的属性 xff0c lsusb 会显示驱动和内部连接到你系统的设备 直接在控制台输入 lsusb 即可 安装 如果无法运行 lsusb xff0c 使用以下命令安装 xff
  • 算法总结

    在2020年的时候 xff0c 我第一次接触了C 43 43 编程 xff0c 那时的我是一位四年级的小学生 xff0c 觉得挺好玩的 xff0c 爸爸就给我推荐了一门课程 程序设计与算法 xff08 一 xff09 C语言程序设计 xff
  • ubuntu16.04安装docker

    ubuntu16 04安装docker 开始安装 开始安装 由于apt官方库里的docker版本可能比较旧 xff0c 所以先卸载可能存在的旧版本 xff1a span class token function sudo span span
  • docker命令中的/bin/bash

    docker run i t tomcat bin bash 中的 bin bash的作用是因为docker后台必须运行一个进程 xff0c 否则容器就会退出 xff0c 在这里表示启动容器后启动bash
  • 如何将文件从本机上传到docker容器

    1 如何从docker容器中下载文件 xff1a docker span class token function cp span container created path span class token operator lt sp
  • libjpeg.so.8: cannot open shared object file: No such file or directory.

    在docker容器里执行carla的PythonAPI报错 xff1a libjpeg so 8 cannot span class token function open span shared object file No such s
  • Docker容器图形界面显示的配置方法

    参考博客 0 环境说明 Ubuntu 16 04 docker 19 03 12 因为要在docker中用pygame xff0c 要用到显示器 xff0c 这个时候需要解决这个Docker 可视化 的问题 原理简介 原理上可以把docke
  • 在docker中运行carla

    参考carla文档 ubuntu18 04 carla0 9 9 docker19 03 12 Docker Installation Docker CE For our tests we used the Docker CE versio
  • Pyglet设置窗口标题

    Pyglet教程 Caption The window s caption appears in its title bar and task bar icon on Windows and some Linux window manage
  • Linux 解决远程连接的 “Gtk-WARNING **: cannot open display;”

    转发 ssh Y username 64 ip 使用 Y 参数实际上是授权了 X11 转发 xff0c 这样就可以看到来自远端的 gtk 图形窗口了 span class token function man span span class
  • android jni调试 - 堆栈分析

    一 环境 xff1a windows rk3399 android 7 1 二 奔溃信息 pid 13544 tid 13639 name no localmeeting gt gt gt com sino localmeeting lt
  • CFileDialog的使用[转]

    由于项目需要 xff0c 查阅了一下CFileDialog类 xff0c 以满足程序自动读取配置文件的需求 xff0c 现在小小记录一下 xff01 CFileDialog类封装了Windows常用的文件对话框 xff0c 提供个一种简单的
  • 记录一下c/c++的几种计时方式

    include lt iostream gt include lt string gt include lt chrono gt void Run for int i 61 0 i lt 10000000 i 43 43 void time
  • [转载] 强化学习开源框架整理

    转载 https zhuanlan zhihu com p 582396276 本篇主要是介绍了不同的 RL 开源工作 xff0c 包括环境开源工作和算法开源工作 xff0c 同时关注这些开源工作对于多机多卡并行分布式训练的支持 算法框架
  • tf模型在C++部署

    tensorflow训练好的模型使用ONNX Runtime在C 43 43 部署 tf模型转onnx使用tf2onnx 在前面的文章有讲到c 43 43 调用tf keras的模型 环境 ubuntu20 04cuda 11 6cudnn
  • Google Breakpad 之一,跨平台crash 处理上报系统简介

    C C 43 43 程序最棘手的时候就是一个字 挂 xff0c 总是经常和不经常的挂掉 xff0c 尤其是那些线上的不经常挂的情况 xff0c 光看日志定位问题真的很难 为解决C挂挂的问题 xff0c 有必要提供一个跨平台的crash处理系