1、addr2line
so堆栈解析:
64位:
/Users/wangyufei10/Library/Android/sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-addr2line -C -f -e <带符号so> 堆栈地址
非64位:
/Users/wangyufei10/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-addr2line -C -f -e <带符号so> 堆栈地址
mac命令位置:
/Android/Sdk/ndk/20.0.5594570/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-addr2line
so文件特别注意:
此处的so一定是要带符号的,Android默认编译的so是经过strip的,也就是编译产物里面的so是不带符号的,带符号so有两种获取方式:
1、 默认情况在中间编译产物里面,具体位置如下图所示:
2、编译带符号的so
打包方法是,在build的android{}里面添加:
packagingOptions {
doNotStrip “/armeabi-v7a/.so”
}
有几个so就添加几个即可
特殊情况:
如果打包的so里面依赖的其他库的so是不带符号的,且crash也发生在依赖的不带符号的so里面,则无法解析行号。
地址位置:
查找backtrace下的对应的so的地址,可以输入多地址