栈发生错误崩溃问题调查
android 升级 ndk版本后,一些操作后导致 so崩溃,具体堆栈如下所示
#00 pc 00065648 /apex/com.android.runtime/lib/bionic/libc.so (abort+171)
#01 pc 000739bb /apex/com.android.runtime/lib/bionic/libc.so (__stack_chk_fail+10)
#02 pc 0005d1f4 /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/5qj6wphhmTmk1MARgm0QSw==/lib/arm/libtemp.so
#03 pc 0005d67c /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/lib/arm/libtemp.so
#04 pc 0005db1c /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/lib/arm/libtemp.so
#05 pc 0005c050 /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/lib/arm/libtemp.so
#06 pc 0005baa4 /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/lib/arm/libtemp.so
#07 pc 0004f594 /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/lib/arm/libtemp.so (nativeCEHD_ProcessData+48)
#08 pc 00205223 /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/oat/arm/base.odex (art_jni_trampoline+82)
#09 pc 00259d53 /data/app/~~g2bAhqG8_OlMwAo21ToyxA==/-5qj6wphhmTmk1MARgm0QSw==/oat/arm/base.odex (com.mediarecorder.engine.internal_onProcessData+98)
大体也能猜到什么问题
解决思路是
1. 首先通过ndk的addr2line 工具找到了崩溃的对应的哪一行
~/Documents/workspace/android-ndk-r21e/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-addr2line -C -f -e ~/Desktop/libtemp.so 00000000005d1f4
2. 根据文件行号找到有可能越界的点
最终发现代码指针在32位传递是有问题的
也就是说 在32位机上指针,通过强制转换64位,进行赋值导致了越界,因此这个只要改成对应的指针强转就好了,
总结:
看起来很难解决的崩溃,往往只是由最简单的错误引起的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)