远程调试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中,敬请期待。
相关文章推荐
- [强]用VC++6.0编译调试汇编程序
- 用VC++6.0编译调试汇编程序
- 如何运用Gdb对ARM板上的程序进行远程调试
- 远程调试java程序
- VS2005不能远程调试智能设备程序的问题
- 汇编语言学习(调试一个缓存溢出的程序)
- php程序调试(远程调试,firephp)
- WinDBG 技巧: 如何用WinDBG远程调试程序
- 汇编调试程序DEBUG
- gdb 远程调试 嵌入式系统下的程序
- 远程调试C# WinForm程序
- 使用VC6调试器源码级调试win32汇编程序
- 使用 gdb 对程序进行汇编级调试
- PDA上的程序不能远程调试的问题(C# WinCE OS)
- 远程调试程序
- 使用VC6调试器源码级调试win32汇编程序
- 同一张光盘安装的VC为什么调试时有的机子是程序步,有的是汇编语言呢?
- 【第一阶段 指令集】仿真器上的第一个程序汉诺塔 汇编代码调试通过
- 用Eclipse远程调试java程序
- WinDBG 技巧: 如何用WinDBG远程调试程序