开发日志整理3【Android tombstone分析 升级篇】

时间:2022-06-20 16:05:07

  记得我在2011年8月的一篇文章Android Tombstone/Crash的log分析和定位介绍了如何分析tombstone。虽然详细介绍了具体的分析方法,但是想要找到具体的出错地点还是比较困难的。

  前段时间在做海思的项目,自己又遇到了和media有关的tombstone的问题,此时非常的纠结。。。百般挫折,终于从芯片的工程师那得知了一个方法可以确认具体的位置。

  废话不多说,方法如下:

  不过注意的是,这个方法一定要有源码和编译源码的环境,并且你已经编译过了,而且机器用的是你编译的系统。。。如果没有这个环境和条件,那么后面就不需要看了。白搭。。。看了也白看。。。如果你有上面提到的环境,那么恭喜你,请继续往下看。。。

  首先找到tombstone的日志

  其他不用看,只看如下的内容:

  backtrace:

  #00 pc 00003558 /system/lib/libcutils.so (android_atomic_inc+8)

  #01 pc 0000d0d1 /system/lib/libutils.so (android::RefBase::incStrong(void const*) const+6)

  #02 pc 00018c0f  /system/lib/libmedia_jni.so

  #03 pc 00019b59 /system/lib/libmedia_jni.so

  ....

这个堆栈是从下往上看,最上面是最后一步调用出错的地方。调用顺序是从下往上。

紧接着,去你的系统代码目录找:out/target/product/xxxx/obj/lib目录,cd到这个目录下。

xxx表示你编译的产品名

假设现在我们想要找到01出错的位置

则可以addr2line 00018c0f -e libmedia_jni.so(也可以使用prebuilts里面的arm-eabi-addr2line)

由于我是海思平台我使用海思自带的arm-hisiv200-linux-addr2line命令,显示的结果如下:

getVideoSurfaceTexture(android_media_MediaPlayer.cpp 245)

这个时候可以很明显的显示出错的具体文件,以及文件出错的位置。

是不是很简单,希望对大家有所帮助^_^