使用gdb调试android用户态代码

环境部署

        如图,windows上运行虚拟机,虚拟机中安装linux系统,主要用于android 系统编译调试环境。至于为什么要这样搞,而不直接在windows上运行gdb程序是因为运行于设备上的gdbserver要和运行于调试pc上的gdb要配套。而目前windows上gdb编译的程序往往是很老的。但是linux环境下的gdbserver和gdb程序是和android编译环境完全匹配的,并且已经预制在android源代码中了(具体位置可以在prebuilts/gdb下找到)。

环境配置

  1. 将gdbserver(64位系统使用gdbserver64)push到调试设备任意可执行目录,将匹配的gdb放到虚拟机系统中。
  2. 增加调试信息到待调试的代码中
    一般需要在cflags中增加 -g -O0选项,并且不strip调试信息
    // Android.bp中增加,对二进制不做strip
    strip : {
        none :ture,
    }

    用带调试信息的二进制替换调试设备中的同名二进制。

  3. 配置网络环境
    调试设备上的配置
    在调试设备上启动gdbserver,设定调试端口(此处我们选择9999端口做gdb调试端口)
    // 比如我们使用9999端口调试1号init进程
    gdbserver64 :9999 --attach 1 
    
    // 另开一个adb 窗口配置端口转发,将调试设备9999端口的tcp报文转发到本机9999端口
    adb forward tcp:9999 tcp:9999
    
    // adb forward --list可以查看所有的adb端口转发规则
    adb forward --list
    e7328503 tcp:9999 tcp:9999

     调试PC上的配置

    // windows上配置将目的192.168.100.1:9999报文转发到127.0.0.1:9999
    netsh interface portproxy add v4tov4 listenaddress=192.168.100.1 listenport=9999 connectaddress=127.0.0.1 connectport=9999
    
    // netsh interface portproxy show all可以查看所有的端口转发配置
    netsh interface portproxy show all
    
    侦听 ipv4:                 连接到 ipv4:
    
    地址            端口        地址            端口
    --------------- ----------  --------------- ----------
    192.168.100.1   9999        127.0.0.1       9999

    注意:要关闭windows的防火墙已经杀毒软件的网络防护功能,否则可能导致windows上的gdb无法连接到gdbserver。 
    调试PC上开启gdb调试

    gdb/linux-x86/bin$ ./gdb
    (gdb) target remote 192.168.100.1:9999
    

       如果连接gdbserver成功后,我们就愉快的调试我们的程序了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值