native 的崩溃相比于 java 很难看懂,对于排查问题很不利。不过我们可以通过 NDK 中的工具 ndk-stack 来还原堆栈信息。需要注意的我们分析bug使用的so文件需要带符号表的so文件。可以利用Git Bash查看。
一、Git Bash查看so库文件是否带符号表
file libVideo.so命令即可查看到这个是没有移除的,就是带有符号表的
可以看到这个so库就是stripped,即移除了符号表。
二、使用格式:
ndk-stack -sym <cpu架构下so库所在的路径>
我用的是逍遥模拟器,所以生成的so库在x86文件夹下,所以完整的使用命令如下:
ndk-stack -sym D:\Android\AndroidStudio\Project\JniDemo\UnixLearn\build\intermediates\cmake\debug\obj\x86
三、直接在 logcat 中还原,前面需增加adb logcat |
adb logcat | ndk-stack -sym D:\Android\AndroidStudio\Project\JniDemo\UnixLearn\build\intermediates\cmake\debug\obj\x86
异常的位置如下:
四、结合tombstone,定位jni异常
tombstone一般位于/data/tombstones/路径
4.1、使用ndk-stack -sym xxx -dump XXX
-sym后面是指向so库的绝对路径
-dump后面是指向tombstone文件的绝对路径
五、结合logcat,实时查看异常地址
adb logcat | ndk-stack -sym D:\Android\AndroidStudio\Project\JniDemo\UnixLearn\build\intermediates\cmake\debug\obj\x86
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/lepaitianshi/article/details/126609051