我在android上调试native程序时,参考了网上不少文章,这里结合我的经历做些注解
第一步、先列清楚我使用的环境
手机:是台真实手机,不是模拟器,已经root了
电脑:是windows7系统,网上不少是用linux来讲解的
AndroidSDK:路径假定是%ANDROID_SDK%,那么建议把%ANDROID_SDK%\platform-tools目录加到PATH环境变量中,这样能在命令行直接使用adb了
AndroidNDK:我用的是r9b版本,路径假定是%ANDROID_NDK%
gdbserver:该文件在%ANDROID_NDK%\prebuilt\android-arm\gdbserver\下
gdb:该文件在%ANDROID_NDK%\toolchains\arm-linux-androideabi-4.8\prebuilt\windows\bin\下,建议用arm-linux-androideabi-4.8目录的,和gdbserver版本一致
RootExplorer:手机root后基本都会安装的软件,有的也叫RE管理器
第二步、把gdbserver放到手机里
方法1:使用adb push,参照网上教程,但在我的手机上提示权限不足。我用adb shell,再su切换到root,发现许多操作都没权限,估计是手机root不彻底导致或别的啥原因,搜索资料没找到原因
方法2:要把gdbserver放到手机里,还有简单方法,usb连接电脑后,把gdbserver拷贝到SD卡上,然后用RootExplorer拷贝到/data/bin/(目录你可以自行选择,我是放在/system/xbin/下),然后在RootExplorer里把gdbserver的执行权限加上,这样就能执行gdbserver了
第三步、把手机上相关文件复制到电脑上来
具体要把手机上的/system/lib目录下的所有文件和待调试程序的so(在/data/data/待调试程序包名/libs/下)复制到电脑上
复制方法:用RootExplorer吧,先复制到SD卡,再从SD卡复制到电脑上,假定目录是c:\work\
还要注意一点,待调试程序的so要求有符号表信息,也就是说是没strip的版本,也就是一些资料上说的xxx/out/target/xx...xx/symbols/system/lib。我不是用这种方式编译,路径和这个不一样,但原理都是没strip掉符号表的so
第四步、启动要调试的程序后,运行gdbserver
方法1:在adb shell-->su后,执行"gdbserver :1234 --attach 待调试程序PID"
但这一步在我的手机上提示权限不足,参见第二步方法1的说明
方法2:我在应用宝搜索安装了个"ssh服务器",也就是QuickSSHd,设置好端口和密码,运行sshd后,就能想登录linux服务器一样登录手机了。
麻利的打开SecureCRT,连接上去,su后各种权限正常,太爽了。
执行"gdbserver :1234 --attach 待调试程序PID"能正常attach的目标进程
第五步、在电脑上进入gdb所在目录,执行arm-linux-androideabi-gdb.exe
shell adb forward tcp:1234 tcp:1234 //如果没把%ANDROID_SDK%\platform-tools目录加到PATH环境变量中,这里会报错
file c:/work/libApplicationMain.so //如果不用file加载待调试程序的so,那么info threads时只会显示1个线程
set solib-search-path c:\\work //如果不set solib-search-path,那么就看不到符号信息,只会看到 ??()这样的指示
target remote :1234//开始正式gdb
info threads//查看线程
当你想知道GLThread线程ID时,有个简单办法是在DDMS中查看Thread ID,然后和info threads中输出的对照下,从而在thread ID执行中输入正确的ID
其他说明:
1、网上有个编译好的strace工具,也可以放在手机上,用strace来统计、分析程序的系统调用情况,放在附件中了。
2、VisualGDB主要是为gdb增加了个可视环境,还是用gdbserver和gdb来调试的,在我的手机上也是因为adb shell权限不足问题无法使用。
相关推荐
aarch64-linux-android-gdb 可调试arm64位内核的工具,目前自己测试可用
Eclipse+CDT+GDB调试android NDK程序
直接push到Android某目录下,然后adb shell登陆shell 就直接可以用这个gdb调试程序了
在linux-x86下运行该脚本,即可以开始gdb的调试了。
VisualGDB调试Android JNI和Linux项目。详细的介绍了如何使用Visual GDB调试Android JNI项目和Linux项目。由于某些原因,图中部分内容被抹掉。敬请见谅。
本工具是为了开发android嵌入式产品时,可用来调试系统服务的GDB工具,作用跟linux下开发调式工具GDB一样,但该工具包括多部分,配置相对麻烦。
Eclipse+CDT+GDB调试android_NDK程序
gdb动态调试android可执行程序1
vs下调试android apk利器, 破解版无后顾之忧。内附详细调试和使用说明。
android 设备的gdb调试工具,gdb版本7.11 ,使用android_ndk_r9c工具编译。使用时,adb push 工具到实际使用的目录采用, adb shell的方式进入android设备,然后 ./gdb 运行使用,开发这个的主要原因是为了解决内核...
本文详细描述欺骗ndk-gdb之后,如何使用gdb的各种常用命令去调试Android的动态链接库。包括如何反汇编,如何单步,等
该gdb工具可以直接运行在android设备上进行gdb调试。无需gdbserver远程调试。 支持android 10以上 android_api 21
Android源码的Java代码调试方法比较简单,网上很多资料。 使用GDB调试C++代码的方法也有,不过实践起来容易被各种问题卡住。本文章权当多一个参考。
用于 Android 调试的 GDB 7.7 我为解决构建的 gdb-7.7 的 Win32 二进制文件。 与 Google 的构建不同,我的构建缺少 Python 支持,但具有 libiconv(即设置主机字符集、目标字符集和目标宽字符集)支持。 安装: 将...
VisualGDB 是 Visual Studio 的一个非常强大的扩展,它允许您调试或调试嵌入式系统。这个程序有一个非常有吸引力的用户界面,它具有许多用于调试或调试代码的功能。VisualGDB 还有一个向导,可以帮助您调试程序并为...
对于涉及到C/C++代码的开发,例如JNI开发和安全相关开发,更加建议在Android源代码开发环境进行,这样就可以利用gdb以及gdbclient工具进行调试。这个PPT主要讲Android源代码下载、编译和运行,以及C/C++、Java代码的...
visualgdb新版本对android的开发调试支持越来越好。我相信很多用户会对这个的需求越来越深入。喝水不忘挖井人,感谢VISUALGDB这个产品的开发者。更感谢fallrain 对此做的贡献。 Fixes in R5: Added a workaround for...