安卓JNI调试、C++/C代码调试、native层调试策略
2015-12-19 14:05
1051 查看
由于在PC端的调试并不能应用到真机——安卓系统环境,NDK在安卓IDE环境中的调试便给众多开发者带来了无尽的困扰。
其实,NDK已然为众多开发者铺好了一条DEBUG的平坦大道,只是问津者尚在少数。
本文将介绍一下最好的JNI调试策略之一:
首先,打开命令行,需要将目录定位到NDK所在目录(已经配置环境变量可自动忽略此步骤)
执行以上语句,armeabi代表真机CPU
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/02/4b4f7f1f819a436f2274830fbdb08299)
然而这样的结果只能显示出出问题的方法,并不能显示问题所在行
此时,就需要NDK提供的 arm-linux-androideabi-addr2line 工具协助
D:\android-ndk-r10d\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin
实在找不到的朋友也可以自行下载
将CMD定位到此目录bin后,根据下图红框的地址 00011080
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/02/bef9de05d10399c9501e7527cacc5806)
根据地址00011080,借助arm-linux-androideabi-addr2line工具来进行查找c/cpp文件对应错误位置
这部分路径E:\app\src\main\obj\local\armeabi-v7a\libstitchercore.so就是so文件所在地址,切记一定要定位到obj目录,否则定位到其他目录下的so,查出来的行数则会显示问号
路径后面紧接着的就是地址00011080,每次查询对应修改成自己的地址就可以了,查询定位到相关出错文件行数,显示如下:
其实,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,每次查询对应修改成自己的地址就可以了,查询定位到相关出错文件行数,显示如下:
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 详解HDFS Short Circuit Local Reads
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序