gdbserver工具移植及使用简介

嵌入式系统资源有限性,一般不能直目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。 Gdbserver在目标系统中运行,gdb则在宿主机上运行。一般linux发行版中都有一个可以运行的gdb,但开发人员 不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台作一个简单配置,重新编译得到相应gdb。
一.下载GDB源码
路径:http://ftp.gnu.org/gnu/gdb/ 可以下载最新的版本

二.交叉编译gdbserver工具
1.建立一个目录用于存放gdb文件
workstation:/opt$ cd /opt
workstation:/opt# mkdir gdb
root@workstation:/opt# mv /home/yinhonggen/Desktop/gdb-7.12.tar.gz gdb
2.解压源文件
root@workstation:/opt/gdb# tar xvf gdb-7.12.tar.gz
3. 编译文件
root@workstation:/opt/gdb/gdb-7.12# cd gdb/gdbserver/
root@workstation:/opt/gdb/gdb-7.12/gdb/gdbserver# ./configure –host=arm-xilinx-linux-gnueabi
说明:arm-xilinx-linux-gnueabi为交叉编译环境
生成makefile
root@workstation:/opt/gdb/gdb-7.12/gdb/gdbserver# make -j4
在当前目录下生成目标文件gdbserver
4.将目标文件gdbserver拷贝到目标板的/usr/bin目录下,并赋予执行权限chmod +x gdbserver

三. gdbserver+gdb使用
(1) 目标板
执行命令zynq> gdbserver 192.168.59.133:5000 zhh_1553b_main_test
说明:1. 192.168.59.133为虚拟机的ip地址
2. 5000为监听的端口,这个值可以自己设定,只要和虚拟中设置的端口号一致即可。
3. zhh_1553b_main_test为要调试的可执行文件,在编译代码时应加上编译选项“-g”
执行后的结果:
zynq> gdbserver 192.168.59.133:5000 zhh_1553b_main_test
Process zhh_1553b_main_test created; pid = 645
Listening on port 5000

(2) 宿主机(PC机,交叉编译环境呢)
a.进入到交叉编译环境中,生成的可执行文件目录下,调试代码要在此目录下进行,
否则在调试代码的时候会提示找不到源文件,此例的目录为/mnt/hgfs/linux_share/1553B/1553b_project/bin#
b.执行命令:
root@ubuntu:/mnt/hgfs/linux_share/1553B/1553b_project/bin# arm-xilinx-linux-gnueabi-gdb zhh_1553b_main_test
说明:1. arm-xilinx-linux-gnueabi-gdb为交叉编译化境里自带的GDB,一般的交叉编译环境中都会带有gdb,如何没有
需要自己移植
2.zhh_1553b_main_test为交叉编译后的可执行文件
c.进入GDB后执行如下命令:
(gdb) target remote 10.0.2.250:5000
说明: 1. 10.0.2.250为目标板上的ip
2. 5000为监听端口,应与目标板一致
执行结果:
目标板:
zynq> gdbserver 192.168.59.133:5000 zhh_1553b_main_test
Process zhh_1553b_main_test created; pid = 613
Listening on port 5000
Remote debugging from host 10.0.2.10
PC机:
Remote debugging using 10.0.2.250:5000
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0xb6f4bd60 in ?? ()
(gdb) l
Cannot access memory at address 0x0
72 };
73
74
75
76
77 int main(int argc, char* argv[])
78 {
79 BrAda1553B_RT* adaRT;
80
81 adaRT = new BrAda1553B_RT();
(gdb)

接下来就可以gdb的调试了
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值