安卓JNI调试、C++/C代码调试、native层调试策略

由于在PC端的调试并不能应用到真机——安卓系统环境,NDK在安卓IDE环境中的调试便给众多开发者带来了无尽的困扰。


其实,NDK已然为众多开发者铺好了一条DEBUG的平坦大道,只是问津者尚在少数。


本文将介绍一下最好的JNI调试策略之一:

一.NDK-STACK

如果没有将NDK所在路径配置到环境变量ClassPath中的朋友们,可以去配置一下,这样将大大方便我们后期的调试步骤。


首先,打开命令行,需要将目录定位到NDK所在目录(已经配置环境变量可自动忽略此步骤)

adb logcat | ndk-stack -sym $PROJECT_PATH/obj/local/armeabi

执行以上语句,armeabi代表真机CPU

$PROJECT_PATH/obj/local/armeabi
这个目录为动态链接库所在目录,也可以以绝对路径形式表示,在手机端与电脑进行连接后,Run App出错,命令行将会显示错误信息





然而这样的结果只能显示出出问题的方法,并不能显示问题所在行


此时,就需要NDK提供的 arm-linux-androideabi-addr2line 工具协助


二.arm-linux-androideabi-addr2line


本人的arm-linux-androideabi-addr2line路径如下所示:

D:\android-ndk-r10d\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin


实在找不到的朋友也可以自行下载


将CMD定位到此目录bin后,根据下图红框的地址 00011080



根据地址00011080,借助arm-linux-androideabi-addr2line工具来进行查找c/cpp文件对应错误位置

arm-linux-androideabi-addr2line -C -f -e E:\app\src\main\obj\local\armeabi-v7a\libstitchercore.so 00011080

这部分路径E:\app\src\main\obj\local\armeabi-v7a\libstitchercore.so就是so文件所在地址,切记一定要定位到obj目录,否则定位到其他目录下的so,查出来的行数则会显示问号


路径后面紧接着的就是地址00011080,每次查询对应修改成自己的地址就可以了,查询定位到相关出错文件行数,显示如下:



猜你喜欢

转载自blog.csdn.net/tyndale1993/article/details/50358076
今日推荐