您的位置:首页 > 编程语言

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

2015-03-25 13:13 127 查看

前言

原创文章欢迎转载,请保留出处。
若有任何疑问建议,欢迎回复。
邮箱: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程序,代码如下:




然后编译(带上-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,或者选择静态链接-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中,敬请期待。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: