分享

配置GDB+GdbServer远程调试环境

 圆锥的布袋 2017-06-14

1、本文概述及前期准备工作:

开发板和宿主机需要使用网线联机调试,宿主机运行GDB,目标板运行GDBServer。

宿主机内核版本:Linux 2.6

目标板平台:arm-linux

交叉编译链:arm-linux-gcc

  Gdb版本:Gdb 7.4

2、Gdb,GdbServer介绍:

gdb介绍:参见维基百科:http://zh./wiki/GDB

gdbserver:http://en./wiki/Gdbserver

3、宿主机如何配置GDB:

3.1、下载: http://ftp./gnu/gdb/ 选择相应的GDB版本
3.2、解压:tar jxvf gdb-7.4.tar.bz2
3.3、进入到解压目录:cd gdb-7.4/
        #./configure --target=arm-linux --prefix=/usr/local/arm-gdb –v
其中--target是gdb目标平台,--perfix用来指明安装路径,安装完成之后,可以将此路径加入到环境变量中:
进入./bashrc,添加语句export PATH=$PATH:/usr/local/arm-gdb/bin,即可直接使用。
#make
#make install
即在刚才指明的安装路径/usr/local/arm-gdb/bin中生成arm-linux-gdb工具

4、目标板安装配置GDBserver:

    目标板使用的GDBSServer需要交叉编译,我所使用的目标板平台为 arm-linux;

4.1  首先进入 gdb目录下的gdbserver目录中,即:cd gdb/gdbserver/

4.2  在此目录下,配置  ./configure --target=arm-linux --host=arm-linux  

--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb

       #make CC=arm-linux-gcc 由于我这里已经将交叉编译链目录添加到环境变量中,如果出现arm-linux-gcc not found 请使用绝对路径指明交叉编译工具链的位置;

但是这里可能会遇到一个错误,错误的信息如下:

linux-arm-low.c: In function `arm_stopped_by_watchpoint':
linux-arm-low.c:642: error: `PTRACE_GETSIGINFO' undeclared (first use in this function)
linux-arm-low.c:642: error: (Each undeclared identifier is reported only once
linux-arm-low.c:642: error: for each function it appears in.)
错误的信息为:linux-arm-low.c中的一个PTRACE_GETSIGINFO未声明
解决方法如下:
既然这个C文件中没有声明,就去查找一下这个变量位置:
grep "PTRACE_GETSIGINFO" * -nR
找到如下信息:
......
arm-linux/sys-include/linux/ptrace.h:27:#define PTRACE_GETSIGINFO       0x4202
.......
说明PTRACE_GETSIGINFO是在交叉编译工具链:linux/ptrace.h文件里定义的
于是在linux-arm-low.c加上:#include <linux/ptrace.h>;
再次编译:#make CC=arm-linux-gcc 
完成后,将生成的gdbserver复制到开发板;

5、宿主机+目标板连调:

到目前为止我们需要的工具均已准备完成,可以进行最后的连接工作了;

当然之前我们还需要做一下热身工作:

1、需要使用GDB+GDBServer连调的程序,编译的时候请使用-g 选项;

2、将应用程序copy至宿主机arm-linux-gdb相同目录下:

热身工作完成,现在开始联机调试:

首先在目标板上运行gdbserver  <主机IP:端口号>  需要连调的程序名 ,举个小例子:gdbserver 192.192.192.105:1234 test  (test是我的示例联调程序)          如果权限不够,请自行chmod 

                        这时打印信息 :

Process test created; pid = 751
Listening on port 1234  即在监听1234端口

切换到宿主机系统:使用./arm-linux-gdb test进入到gdb调试环境中:

GNU gdb (GDB) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http:///licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i386-pc-linux-gnu --target=arm-linux".
For bug reporting instructions, please see:
<http://www./software/gdb/bugs/>...
Reading symbols from test...done.

这时,我们需要使用远程调试的命令:

(gdb) target remote 192.192.192.200:1234 (IP为目标板IP,端口为刚才我们打开的目标板监听端口)

此时 目标终端打印命令:Remote debugging using 192.192.192.105:1234

连接成功!

6、Gdb使用常用命令说明:

GDB的一些常用命令均支持,在此不一一详述。

不过在联调的环境下,运行程序需要使用 “c”而不是“r”

如果运行带参数的程序,请使用 set args 进行参数传递,比如 运行的程序为  ./test -a -b -c  我们需要进行参数传递的格式为set args -a -b-c    再次  “c”;即可

7、参考资料:

维基百科:http://zh./wiki/GDB

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多