前言

上一篇给大家介绍了Android Crash中的Java Crash分析,我们可以知道Java Crash一般会弹出提示框告诉我们程序崩溃了,通常使用Crash工具都能够捕获到;本篇博客来谈谈如何针对Native Crash进行分析,它相对与Java层面的Crash有什么特点?如何判断程序Crash是因为Native层导致的?我们怎么去分析它?下面我们一个一个解答这些问题。

Native Crash在Android上的特点

出错时界面不会弹出提示框提醒程序崩溃(Android 5.0以下)

出错时会弹出提示框提醒程序崩溃(Android 5.0以上)

程序会直接闪退到系统桌面

这类错误一般是由C++层代码错误引起的

绝大部分Crash工具不能够捕获

我们在实际Android开发的时候,可能会引入第三方的一些so库或者自己开发相应的so库供程序使用,然而so库一般是通过c或者c++开发的。Android开发者通过java层的JNI机制调用Native语言写的函数,然而Natice语言也可以调用java层的函数。 如果有同学不明白的话,建议先去了解下JNI的相应技术,总的来说通过JNI技术,就让我们让Java世界跟Native世界可以联系在一起,也因为这个特性,让Java具有跨平台的特性。

Native Crash是如何产生的?

上一节我们谈到so库是同通过Native语言开发的,自然在Android中使用so库的时候发生的Crash,就是我们所说的Native Crash。为了更好的让大家知道Native Crash是如何产生的,下面笔者举一个例子:

Java层定义Native方法

本地方法跟普通的Java方法的区别在于方法声明多了native关键字。

JNI层实现Native方法

这里我们制造一个Native Crash,空指针异常。

通过Java调用Native方法

要调用Native方法需要先加载我们开发好的so库,通过System.loadLibrary(“so名字”);来调用,然后在通过java调用声明的native方法。

Native Crash如何分析?

既然要分析就必须找到可以分析的东西,我们在分析Java层Crash的时候是通过logcat日志找到对应的出错代码,然而Native层Crash也是可以logcat日志来进行分析的。

这里我们截取上面制造的crash在logcat显示的日志:

这个是什么鬼,看不懂啊有木有。这个出错信息是我们调用native函数时打印出来的日志,只是简单的描述出错信号,出错地址还有进程号,看这个是完全摸不着调的。不过系统还是会提供相关有用的日志,我们在Android Studio查看logcat的时候需要做一下过滤。

在logcat添加完”DEBUG”的过滤项之后,我们就能得到以下log:

这下子可分析的内容就多起来了,我们逐个来看看:

进程信息:pid表示进程号,tid表示线程号,name表示进程名

错误信号:signal 11表示信号的数字,SIGSEGV表示信号的名字,code 1(SEGV_MAPERR)表示出错代码,fault addr 00000000 表示出错的地址。

寄存器快照:进程收到错误信号时保存下来的寄存器快照,一共有15个寄存器。

堆栈信息:##00表示栈顶,##01调用#00,以此往下都是嵌套的调用关系,直至到栈顶。

我们在栈顶就已经看到我们出错的地方了:

#00 pc 00000730 /data/app-lib/com.devilwwj.jnidemo-1/libJNIDemo.so (Java_com_devilwwj_jnidemo_TestJNI_createANativeCrash)

pc 00000730 表示出错的地址,后面可以看到我加载了libJNIDemo.so库,接着是我们前面声明的Native方法,通过这种方法我们就能准确的找到出错的地方。

从上面的分析我们可以看到,so库崩溃时会产生信号异常,如果我们能够捕获到信号异常,相当于我们也能够顾捕获到Android Native崩溃了。

总结

关于Native Crash的特点、产生原因、分析过程已经给大家做了简单的分析,这一块内容是初学者在分析错误的时候最头痛的地方,因为他不知道如何下手,也希望通过这篇文章能帮助到大家对Native Crash分析有个初步的认识,关于这一块还有很多东西可以讲,比如具体的signal有哪些,Linux下的信号机制是怎样的,怎样才能够捕获到信号等等,关于Native层的Crash捕获,我们有没有第三方的开发工具能帮助到我们,这里就要隆重推荐大家使用Bugly,可以说是业内领先的崩溃捕获工具,不仅能够帮助我们获取到完整的错误堆栈,还能够将出错的上下文环境参数(比如系统版本、设备信息、内存信息等)详细的展现出来,大家不妨可以尝试下。最后,感谢大家的阅读。

android crash分析工具,Android Crash之Native Crash分析相关推荐

  1. Android Gradle 构建工具(Android Gradle Build Tools)是什么?

    转载地址:http://mrfu.me/android/2015/07/17/New_Android_Gradle_Build_Tools/ 译者地址:[翻]一览新的 Android Gradle 构 ...

  2. 性能分析工具 Android TraceView

    1. TraceView 简介 Traceview是android平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到每个方法的执行时间 Tracev ...

  3. android--------内存泄露分析工具—Android Monitor

    Android Studio 内置了四种性能监测工具Memory Monitor.Network Monitor.CPU Monitor.GPU Monitor,我们可以使用这些工具监测APP的状态, ...

  4. android 内存泄漏分析工具,Android内存泄漏终极解决篇(上)

    一.概述 在Android的开发中,经常听到"内存泄漏"这个词."内存泄漏"就是一个对象已经不需要再使用了,但是因为其它的对象持有该对象的引用,导致它的内存不能 ...

  5. Android游戏帧分析工具,android性能跟踪分析工具系列 - TraceView

    37624124_1408459493746.jpg 文集目录 话说前2篇都是介绍查看app 每帧的渲染,根据不同任务耗时离来查找问题,那么我们现在可以发现 app 卡顿是由哪个任务区域造成的,然后呢 ...

  6. android app性能测试工具,Android 性能测试 - 内存

    1.内存了解 在Android App的性能优化的各个部分里,内存方面的知识较多且不易理解,内存的问题绝对是最令人头疼的一部分,需要对内存基础知识.内存分配.内存管理机制等非常熟悉,才能排查题. 1. ...

  7. android oom 检测工具,Android中UI检测、内存泄露、OOM、等优化处理

    对Android整个优化分析,非常棒,下面是自己的积累笔记.可直接看原文. 界面检测工具: Fps: GPU检测, 使用Lint进行资源及冗余UI布局等优化 (很强大,布局的冗余) Memory检测G ...

  8. android 微信检测工具,Android 如何测试微信小游戏小程序?

    "微信小游戏性能评测标准建立的初衷是希望能引导开发者优化相关性能数据,提升用户体验.评测标准根据小游戏整体的性能数据表现.玩家体验评价,结合操作系统.机型分档.网络条件等多种维度建立.&qu ...

  9. Android集成开发工具——Android Studio

    Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似Eclipse ADT,Android Studio 提供了集成的 Android 开发 ...

最新文章

  1. python 驱动级鼠标_Python介绍、安装
  2. Spring Bean 后置处理器
  3. html中选择省份城市,省份、城市、区县三级联动Html代码
  4. centos7设置mongodb远程连接(亲测)
  5. python判断list集合中是否包含某个元素_python怎样判断list是否包含某个元素
  6. matlab gui怎样将结果保存_Processing将串行数据保存用作matlab数据分析
  7. Windows环境变量配置问题
  8. 自定义admin组件,Xamin
  9. 2021年高压电工考试题及高压电工考试试卷
  10. 普渡大学 计算机金融,普渡大学金融数学专业排名2019年
  11. BLM模型:解决问题的前提是定义问题
  12. 粒子能量、量子波动方程、狄拉克方程、量子态【量子力学基础知识学习笔记_3】
  13. 主流的大数据BI软件有哪些?
  14. vue实现数据无缝循环滚动
  15. 一个研究生学历到底值多少钱?为什么现在那么多人选择在职考研?
  16. virtual box ubuntu鼠标点进去不反应
  17. 快速列出windows10中所有已安装的应用列表(兼容win11)(长期有效)【伸手党福利】
  18. 如何在Mac上剪切和粘贴文件和文件夹?
  19. SAP程序设计/黄佳:图书:价格比较:琅琅比价网
  20. 【数据手册】LM1117L3芯片的使用

热门文章

  1. Microsoft Windows XP SP3安装测试手记
  2. 如何在应用内设计一份调查?
  3. CentOS6.2下安装中文输入法
  4. 25个增强iOS应用程序性能的提示和技巧--高级篇
  5. linux 2.6线程创建源码分析
  6. 523. 连续的子数组和
  7. 22.使用非阻塞IO 1
  8. mysql全套基础知识_mysql系列--基础知识
  9. thinkphp6 加载第三方类库_thinkphp中第三方类引入问题
  10. 客户端连接idea_IDEA新特性:提前知道代码怎么走!