老戚的黑科技之gdb与gdbServer的使用

一、调试原理
有很多时候我们需要把编译出来的进程运行在另外一台机子上,可能是嵌入式开发板,也可能是另一台linux虚拟机,由于某种原因,在起gdb单步调试的时候关联不到源码,这会让我们很不爽。今天将会在这里介绍一种新的调试手段,让进程运行在另一台机子上的同时,单步调试的时候也能显示源码。
很多人只知道用gdb来调试进程,却不知道gdbServer的存在,从名称上也能猜出来,gdbServer是gdb的一个服务端,那gdb必然就是相对应的那个客户端了。这二则之间是TCP连接,gdb发送命令给gdbServer,gdbServer收到命令后会控制进程进行相对应的操作,然后把操作结果反馈给gdb。
二、安装gdb、gdbServer
1、首先从http://ftp.gnu.org/gnu/gdb/上找到系统需要的那个gdb安装包,注意版本号要一样。
2、在linux上用gdb -v来查看gdb的版本,如:
这里写图片描述这里的gdb版本是7.6.1-64.e17,因此在网站上找到gdb-7.6.1.tar.gz该包下载。
3、解压:tar zxf gdb-7.6.1.tar.gz
4、在linux系统下,不需要设置/configure –target=arm-linux,只需要执行./configure即可,自动会生成Makefile文件,随后make,直到编译完成。
5、执行cd gdb-7.6.1/gdb/gdbserver,在gdbServer这个目录下有一个gdbServer的可执行文件,只需要把该文件拷贝到目标机子的/usr/bin目录下即可。
三、gdbServer与gdb测试
先交代一下测试环境:
这里写图片描述其中在机子D上跑从机子B编译出来并拷贝过来的进程。
从图中也能看出来,机子D跟外网不是直接相连的,因此在这里需要用ssh这个工具创建一个隧道(创建方法请查看老戚的黑科技之SSH隧道技术)。在机子B上运行
$ ssh -NfL 6666:192.168.1.100:5555 172.16.163.212 即可。在创建了隧道,机子D能通过5555这个端口跟外网通讯了,那就可以在机子D上启动gdbServer了。
启动gdbServer的方法是:
gdbserver 192.168.1.100:5555 uinet_server_bin -c 1 -n 1 -- -p 0这里的5555告诉gdbServer监听的端口是什么,192.168.1.100告诉gdbServer监听的地址是什么。这里写图片描述
启好了gdbServer,那就只需要再启动gdb就算完成一半了,启动gdb的方法是:

gdb uinet_server_bin

这里写图片描述target remote localhost:6666 告诉gdb将要连接的gdbServer是哪个。
这里为什么是localhost呢?因为我们这里建立的SSHClient监听的端口是6666,而且SSHClient跟gdb 是在同一台机子上。我们需要把报文发到6666端口,那地址可以是localhost跟127.0.0.1 。
连接成功后,gdbServer会显示:
这里写图片描述
gdb端会显示:
这里写图片描述
到此就可以在gdb这边加断点或单步执行了,并且还能看到源码哦。按c就能跑起来了,快来试试吧!!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值