远程调试C程序和汇编程序

前言

原创文章欢迎转载,请保留出处。
若有任何疑问建议,欢迎回复。
邮箱:Maxwell_nc@163.com

之前我们编译了Gdbserver和arm-linux-gdb,接着我们使用它们进行远程调试C程序和汇编程序。
arm-linux-gdb和gdbserver之间可以通过TCP(格式为host:port)、UDP(格式为udp: host:port)或者串口(比如/dev/ttyb)来通信,我们以TCP方式为例来说明。


远程调试C程序

这里我们采用buildroot生成的根文件系统,首先要添加对应的工具链到环境变量,把buildroot生成的主机bin目录添加到环境变量,source生效,其中地址为:
/home/max/qemu/buildroot/buildroot-2012.05/output/host/usr/bin,生效后可以使用对应根文件系统的工具链版本,这里使用的gcc是4.5.3版本,gdb编译时选择7.4.1版本,可以在buildroot配置config自行选择版本。

下面我们先写一个welcome程序,代码如下:
welcome代码
然后编译(带上-g为调试使用)

arm-linux-gcc test.c -g -o test

编译

到qemu测试运行,成功后证明编译没有问题,接下来开始使用gdbserver。
测试运行

Qemu上输入gdbserver 192.168.42.2:1234 ./test,其中192.168.42.2是当前网卡ip,可以用ifconfig查看,我们这里使用虚拟的tap0网卡。开启后,gdbserver现在正在监听:
监听

接着在主机打开arm-linux-gdb调试,输入arm-linux-gdb ./test进入gdb后输入target remote 192.168.42.2:1234开始远程调试:
gdb远程调试

注意出现库问题是由于使用动态编译没有找到库文件,可以把库文件加入gdb,或者选择静态链接-static。
出现问题

正常运行:
正常运行
正常运行退出后,在qemu就会输出
正常退出


远程调试汇编程序

下面我们来测试汇编程序,随手写一个
汇编代码

采用下面语句编译生成

arm-linux-gcc -g -o hello.o hello.S -c
arm-linux-ld -Ttext 0x30000000 -o hello hello.o

调试方法和C语言程序一样,先启动gdbserver,然后再启动gdb,输入target remote进行调试。
这里要注意,要设置断点。下面为正常调试:
断点调试

这里方法和gdb使用差不多,具体自行查看gdb使用手册,下一篇将会介绍如何重新编译linux内核驱动,动态加载到qemu模拟的mini2440中,敬请期待。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值