android平台调试

1. gdbserver 位置:$NDK_DIR/prebuilt/android-arm/gdbserver

2. gdb 位置:$NDK_DIR/toolchains/arm-Linux-androideabi-4.8/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gdb.exe

中间的路径根据自己情况更改

需要注意的是gdbserver和gdb的版本要匹配,否则会出错


待调试的程序为$PRJ_DIR/test_prj


1.在目标机上创建目录/data/test

adb push $NDK_DIR/prebuilt/android-arm/gdbserver /data/test/

adb push $PRJ_DIR/test_prj /data/test/


2.在目标机赋予执行权限

chmod +x ./test_prj

chmod +x gdbserver


3.在目标机上启动gdbserver

./gdbserver :1234 test_prj  [param]

注意gdbserver后面有空格,冒号与1234之间没有空格

如果test_prj需要参数,后面可以加上参数

执行成功则显示

Process test_prj created: pid = 16225

Listening on port 1234


4.在宿主机(windows)上执行arm-linux-androideabi-gdb.exe

执行成功则显示gdb版本号、版权信息等,并有gdb命令提示符


5.在gdb命令提示符后输入命令

(gdb)shell adb forward tcp:1234 tcp:1234

该命令表示通过adb映射tcp端口1234,命令中前面的是local的端口,后面的是remote的端口

可能会显示

adb server is out of date. killing...

* daemon started successfully *

(gdb) target remote localhost:1234

该命令表示与远程程序建立链接

执行成功则显示

  1. Remote debugging using localhost:1234
  2. Cannot access memory at address 0x0
  3. 0x40011384 in ?? ()
同时目标机上显示

Remote debugging form host 127.0.0.1

至此,说明gdb与gdbserver连接成功,可以进行调试了


6.调试

(gdb)file $PRJ_DIR/test_prj

该命令用于读取调试符号

显示 

Are you sure you want to change the file?(y or n)

输入y

(gdb) b main

该命令用于在main函数处加入断电

(gdb) c

该命令运行程序,并在断点处停下

(gdb) n

next

(gdb) p var

显示变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值