NDK反编译crash日志
2020-03-13 本文已影响0人
咸鱼Jay
当我们的NDK出现奔溃后,查看日志可以看到如上图的一脸的懵逼,根本不清楚报错在哪里。
通过上图可以看到backtrace下面的#00是应用程序在整个方法栈中第一个位置,也就是栈顶。pc后的一串数字是调用方法的内存地址,那么我们可以通过这个内存地址可以地位错误信息在哪一行
那么这时我们可以利用addr2line工具,或者ndk-stack工具进行查看具体报错信息
一、addr2line工具
addr2line工具是在NDK开发工具包目录中/NDK/toolchains/选择编译平台/prebuilt/darwin-x86_64/bin
可以通过下面命令查看具体的报错信息:
aarch64-linux-android-addr2line -e 编译的库.so 报错的内存地址
从上面可以看到报错是在native-lib.cpp的第6行
二、ndk-stack工具
ndk-stack工具是在NDK开发工具包的根目录下
image可以通过下面命令查看具体的报错信息:
adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
1、
$NDK/ndk-stack
是ndk-stack的路径
2、$PROJECT_PATH/obj/local/armeabi
是你编译.so库的路径,例如我的是:.../MyNDKTest/app/build/intermediates/cmake/debug/obj/armeabi-v7a
通过打印的错误日志信息可以看出ndk-stack打印的信息是最详细的