对于Android中so库产生的native crash,没有java层那般明显和详细的crash堆栈,捕获到的crash信息需要经过处理才能方便定位,比如获取到以下这种native crash。
其中pc 00006d16就是指向了crash的代码,不过需要工具来协助,在命令行执行
arm-linux-androideabi-addr2line -f -e libmonitortest.so 00006d16
-f表示显示函数名, -e表示execution,后面是包含符号库的文件 以及报错的内存地址(即Crash log里pc后的字段)
执行完后会显示PC值对应的是哪个方法,是哪行代码
如果so库是裁剪过符号信息,则会显示??,无法定位到对应的代码。所以要保留好带符号信息的so库,要判断so库是否带符号信息,可以使用以下命令
arm-linux-androideabi-nm libmonitortest.so
如果有符号信息,则会打印出来;如果没有,则为空
- 本文固定链接: https://freemanapp.com/zh/?p=774
- 转载请注明: freeman 于 FreemanApp 发表