Crash问题(Java与Native)
1.问题介绍
Crash问题,无论是java侧还是native侧,在日常测试中经常会遇到。
Crash问题一般我们可以分为两类,一类是java侧的crash问题也就是抛出exception问题,这一类相对简单。
另一类是native侧的问题,由于是c++或者是c,所以相对较为复杂。
另外,kernel部分的crash暂且不提。
2.分析过程
分析过程主要分两部分,按照不同的问题来做分析。
(1).java侧问题
java侧出现exception抛出但是并没有栈上任何一层都没有一个地方catch住的话,最终将会使程序崩溃。
这种exception一般最终将会在slog中体现,一般如下所示
log中会将该exception的调用栈打出,我们可以跟踪该调用栈进行一步步分析。
此外,由于在一般代码中通常会多次迭代打包exception,比如
如果我们需要查看这个e的调用栈,我们可以在catch block中添加e.printStackTrace()
即可打印Exception e的调用栈。
(2).natvie侧crash问题
native侧crash问题较为复杂。我们需要用到以下工具
32bit:
arm-eabi-addr2line
arm-eabi-gdb
64bit:
aarch64-linux-android-addr2line
aarch64-linux-android-gdb
尽管32bit与64bit工具不同,实际上操作方法一致,我们以64bit为例。
我们举个实际例子来解释
Bug 542978 - [TJ][Telephony][SC9850S][full]点击信息中的网址超链接,偶见“浏览器停止运行”:
现在出现一native crash问题,log中有如下错误报告: