我在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权限不足问题无法使用。

更多相关文章

  1. 【Android(安卓)开发】:UI控件之复选框控件 CheckBox 的使用方法
  2. Android开发之imageView图片按比例缩放的实现方法
  3. Activity生命周期+android测试类(2)
  4. Kotlin&Anko, 扔掉XML开发Android应用
  5. 菜鸟学Android(安卓)之gravity与layout_gravity的区别
  6. java反射机制 调用android得隐藏api
  7. android键盘输入读取
  8. Android(安卓)Intent的几种用法全面总结
  9. android平台移植总结

随机推荐

  1. Android Contextual Menus之一:floating c
  2. Android填坑之旅(第十七篇)MIX2 适配看这一
  3. Android传感器编程入门(一)
  4. Android与单片机通信常用数据转换方法总
  5. WindowManager实现悬浮窗口&可自由移动的
  6. 基于 Android NDK 的学习之旅-----资源释
  7. android sdcard
  8. Android 知识积累一
  9. android菜鸟日记2 contentProvider
  10. Android读写文件!!!!