linux 远程调试文件夹,GDB远程调试开发板程序

一、概述

可能我们都熟悉直接在发行版linux系统下调试系统,只需要在安装系统的时候包含了调试工具,直接可以根据gdb进行调试。但对于很多做嵌入式的来说,可能经常需要调试运行在开发板上的应用程序,下面就来说说。

先说一下我们的调试原理:首席会在开发板上运行一个gdbserver,通过gdbserver接收develop机器的命令,然后通过gdbserver控制开发板的程序运行。gdbserver就相当于开发板应用程序和develop机器之间的桥梁,一方面从develop机器上接收命令控制开发板的应用程序;另一方面,会向开发板报告程序的运行情况,如各种变量的值,方面开发人员调试和观察(这不就是我们调试的目的嘛)。在develop上要装有arm-none-linux-gnueabi-gdb(不一定是这个名字,是属于交叉编译工具链中的gdb,不是发行版linux自带的),用它在develop上启动应用程序,并和开发板联机,通过在develop上输入命令来调试开发板上运行的程序。

二、安装工具:arm-none-linux-gnueabi-和gdbserver

交叉编译器的名字是arm-none-linux-gnueabi-gcc(根据你自己的交叉编译工具,有的可能是arm-linux-gcc),下面会用到

1. 从下载gdb,解压,进到相关目录

2. 编译GDB

#cd gdb-7.2

#./configure --target=arm-none-linux-gnueabi --prefix=/usr/local/arm-gdb   // 上面提到的交叉编译器,就是用在这里,因为我们target上运行

// 的应用程序是用它编译出来的

#make

#make install           //生成在/usr/local/arm-gdb/bin下

把bin下面生成的arm-none-linux-gnueabi-gdb拷贝到交叉编译链目录中或修改环境变量把它的路径加进去,这样我们可以直接用这个命令

3.编译GDB Server

#cd ./gdb/gdbserver       // 即是目录gdb-7.2/gdb/gdbserver

#./configure --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi

#make CC=arm-none-linux-gnueabi-gcc     //编译用于目标机的stub程序  生成gdbserver是GDB客户端程序,在板子上运行。

之后在~/gdb/gdbserver文件夹下生成可执行文件gdbserver

然后将gdbserver拷贝到板子上的某个bin目录下即可。

三、调试步骤

201.123.116.65:5678代表开发板的ip是201.123.116.65,5678是任意给的端口

1.在开发板上:

[root@ATP2400 test-drv]# gdbserver 201.123.116.65:5678 test

Process server created; pid = 907

Listening on port 5678

注意:编译的test程序必须加了调试信息,即编译时加上“-g”

2.在develop上:

[root@ATP2400 test-drv]# arm-none-linux-gnueabi-gdb test

进入到gdb,然后

(gdb) set solib-absolute-prefix /nfsdir/atp2400/mini-rootfs-pgy-1808

(gdb) set solib-search-path /nfsdir/atp2400/mini-rootfs-pgy-1808/lib

(gdb) target remote 201.123.116.65:5678

Remote debugging using 201.123.116.65:5678

warning: Can not parse XML target description; XML support was disabled at compile time

Reading symbols from /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3...(no debugging symbols found)...done.

Loaded symbols for /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3

0xb6fda7b0 in _start () from /nfsdir/atp2400/mini-rootfs-pgy-1808/lib/ld-linux.so.3

解读:上面在gdb下面的操作如果直接执行target remote 201.123.116.65:5678系统会抱怨

说库不匹配,因为启动的gdb是arm-none-linux-gnueabi-gdb,是属于运行开发板程序的gdb,

所以需要用到的动态链接库也应该是arm的,而不是本地库,本地库是支持X86的。前两句就是

设置动态链接库的路径的,/nfsdir/atp2400/mini-rootfs-pgy-1808/是我做的开发板文件系统

的源文件

3.然后就可以直接进行调试了

(gdb) b main

Breakpoint 1 at 0x8698: file server.c, line 19.

(gdb) l

5#include

6#include

7#include

8

9#define SOCKET_PORT 7000

10#define BUF_SIZE 512

11int main(int argc, char *argv[])

12{

13int fd;

14struct sockaddr_in svraddr;

(gdb) c

Continuing.

Breakpoint 1, main (argc=1, argv=0xbefffe94) at server.c:19

19int n = 0;

(gdb)

由现象可以看到在通过develop调试开发板的应用程序时,开发板是不接受任何命令的,用串口终端进行输入会没有任何反应,

只有develop下的gdb退出后,开发板才可以正常接收命令

关于gdb调试命令,请网上查阅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值