记一次收集APP native崩溃信息

最近在学习 极客时间Android开发高手课 老师推荐了Breakpad开源库来采集native 的crash1.为什么要使用Google Breakpad?

我们在开发过程中,Android JNI层Crash问题或者我们引用的第三方.so库文件报错,都是一个比较头疼的问题。相对Java层来说,由于c / c ++造成的崩溃没有输出如同Java的异常Strace堆栈信息,所以定位问题也是个比较艰难的事情。

不知道 JNI 的同学可以点击 Android studio 下 JNI 开发实例  了解下。

Google Breakpad一套完整的工具集,从Crash的捕获到Crash的dump,都提供了相对应的工具。它记录了崩溃时的.dump文件,无论我们是在本地或者发送到服务器端,都可以用相对应的工具来解析.dump文件帮助我们查找C和C ++堆栈踪迹。

但是,由于Google Breakpad是C / C ++编写的,很多Android开发同学并没有这方面的经验,想用而却不能用。而且,Google Breakpad在Github上面的说明,估计很多人看了就懵逼了:

  其实,它的意思是需要去编译Google Breakpad源码去生成适合不同平台下的minidump_stackwalk文件,比如Windows,Mac,Linux等等。当然我也是踩了坑的,参考这个说明,多次尝试后在Windows下确实没有成功过;后??来,利用VMware Workstation Pro中安装Ubuntu 18.10下成功编出来了。

实践:

首先,按照github工程的ReadMe流程走一遍,碰到了2个提示,让我安装NDK和CMAKE,我根据提示安装后编译直接就成功了;

接着就 run,在手机上跑起来了,点击 CRASH,程序崩溃,我进去 sdcard 中看到了 crashDump 目录,成功生成了crash 文件。

接着运行: ./tools/mac/minidump_stackwalk crashDump/***.dmp >crashLog.txt ,结果又报错了:

dyld: Symbol not found: __ZTTNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEE
  Referenced from: /Users/james/Documents/projec/breakpad/Chapter01/./tools/mac/minidump_stackwalk
  Expected in: /usr/lib/libstdc++.6.dylib
 in /Users/james/Documents/projec/breakpad/Chapter01/./tools/mac/minidump_stackwalk
Abort trap: 6

评论中老师说到缺少必要的动态链接库导致的,建议我们去编译breakpad源码;

我自己从 github 上下载了 breakpad 的源码。但是mac 下编译说报错:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
configure:3506: $? = 1

解决办法:安装mac的命令行工具CommandLineTools

xcode-select --install

利用
./configure 
 make
对源码完成了编译,minidump_stackwalk这个文件在src/processor/目录中,然后运行:

./minidump_stackwalk crashDump/***.dmp >crashLog.txt 

大功告成,分享下我得成果:

Operating system: Android
                  0.0.0 Linux 3.18.31-perf-g4fd2040 #1 SMP PREEMPT Tue Dec 4 03:15:19 WIB 2018 aarch64
CPU: arm64
     8 CPUs

GPU: UNKNOWN

Crash reason: SIGSEGV /SEGV_MAPERR
Crash address: 0x0
Process uptime: not available

Thread 0 (crashed)
 0 libcrash-lib.so + 0x600
     x0 = 0x0000007f7583e300 x1 = 0x0000007ff1b88ad4
     x2 = 0x0000007f792e3000 x3 = 0x0000000001e5a140 

其实我没有去下载xcode,电脑内存实在是不够,就不想下载了。主要是知道这个过程和原理

原文地址:https://www.cnblogs.com/huansky/p/11294020.html

时间: 2024-10-30 06:10:56

记一次收集APP native崩溃信息的相关文章

Android APP native 崩溃分析之令人困惑的 backtrace

完美无缺的代码逻辑,一定能产生完美无缺的程序吗?答案是否定的.从软件的层面来看,也许只有二进制才永远不会欺骗你. 现象 近期,业务方反馈了一个奇怪的崩溃问题,认为信息不足,无法解决. Signal: 11 (SIGSEGV), Code: 1 (SEGV_MAPERR) r0 993ff520 r1 dc3170c4 r2 00000000 r3 dabe3e08 r4 993ff520 r5 00000005 r6 00000290 r7 000007ac r8 e83253a0 r9 000

获取app崩溃信息的途径 iOS

获取崩溃日志的几种方法: 1.当用户抱怨闪退时,你可以要求他让设备与iTunes同步,设备与电脑上的iTunes Store同步后,会将崩溃日志保存在电脑上(路径:Mac OS X:~/Library/Logs/CrashReporter/MobileDevice/)到上述位置把崩溃日志下载下来,然后通过电子邮件发送给你:用这个方法获取崩溃日志时,你必需尽量获取用户设备生成的所有崩溃日志.因为崩溃日志越多,就越容易诊断问题所在. 2.如果你装了Xcode,也能很容易通过Xcode从你的设备上获得

APP常见崩溃原因和测试方法整理

测试过APP的人都应该发现,app崩溃是一类非常常见的问题,很多时候还是致命性的,这就要求我们测试人员要尽最大可能去找出软件当中的缺陷,减少app崩溃出现的概率,这里我将收集到的关于针对APP崩溃测试的资料以及自己的工作经验整理如下: 一.APP中BUG的直接影响:App的Bug会直接影响用户的体验.App 商店的评级.用户的忠诚度,声誉等等... 二.App崩溃是非常常见的一类bug,例如很多时候我们正在使用某个Android的APP,正在使用着突然应用就停止响应,界面上弹出“强制关闭错误”的

(插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。

最近 做些准备性得工作和有意思的事情.所以最近做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发者 很头疼的一件事,还有就是一些莫名得错误 有时候也会困扰着我们.现在,unity已经封装得挺好了,及时出现数组越界,和空对象这样严重得错误也不会崩溃,听着挺好,但是这给开发者带了很多烦恼啊.因为有时候可能出错了 你要跟就不知道 ,在什么地方出得错误啊.所以我们要想办法去解决这个问题. 我们都知道及时app崩溃,其实后台还是在运行得 只不过是 到

Android将应用程序的崩溃信息如何保存到本地文件,并上传服务器

导语:最近实在是太忙了,没有怎么更新公众号,也没有怎么认真去写一些内容,在这里先给关注我的朋友说一声抱歉,可能在接下来的一段时间,还是很忙,但是我会争取抽空多分享一下技术文章,给大家看,共同进步,也希望有能力的人可以一起出来分享. 我们在做应用开发的时候,需要程序的崩溃信息,来进行bug的修复和版本的更新,每一个应用程序都会有bug,所以都需要在后台纪录这些bug日志,然后上传到服务器,让程序员看,并进行修复.现在也有很多第三方的jar包能实现这种功能,比如友盟统计等,但是终究不如自己写的方便.

开发过程中遇到的崩溃信息及原因,崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃

崩溃信息: 2016-04-05 13:58:35.913 loopdiner[6714:186743] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7fbeacc01b90> was mutated while being enumerated.' 原因: 遍历数组的时候对数组内容进行了修改,导致崩溃. 解决办法: 将需要遍

获取APP的类结构信息

之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特定的APP,比如微信.淘宝.QQ音乐等等,因为小程可以从这些APP上拿到一些有用的信息或资源--比如,"微信的那个页面是用什么控件来布局的?"."QQ音乐的歌手头像,能批量地拿到吗?",等等. 很明显,如果你知道目标APP的所有类的声明,你就可能直接观察到,或者推导到一些有用的信息. 实际上,把目标APP的类信息拿到,是至关重要的一步,因为这一步的成功让你有了分析的资

数据库性能优化、统计信息与对象统计信息概述收集、扩展统计信息、dbms_stats.get_prefs

数据库性能优化 相关书籍: 1.基于成本的Oracle优化法则 2.Oracle性能诊断艺术 3.基于Oracle的SQL优化 ----------------------------------------------------------------------------------------- 两种优化器: CBO  cost-base optimizer 基于cost 更大适应性/灵活性/10g开始 RBO  rule-base optimizer 基于规则 制定了15条/10g以

Oracle里收集与查看统计信息的方法

Oracle数据库里的统计信息是这样的一组数据:它存储在数据字典里,且从多个维度描述了Oracle数据库里对象的详细信息.CBO会利用这些统计信息来计算目标SQL各种可能的.不同的执行路径的成本,并从中选择一条成本值最小的执行路径来作为目标SQL的执行计划. Oracle数据库里的统计信息可以分为如下6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 表的统计信息用于描述Oracle数据库里表的详细信息,它包含了一些典型的维度,如记录数.表块