`
bigfirebird
  • 浏览: 127545 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

gdb+gdbserver方式进行ARM程序调试

阅读更多
http://blog.sina.com.cn/s/blog_45ef163d0100dx83.html###

远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接。使用 GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。

就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机程序、用KGDB调试系统内核和用gdbserver调试用户空间程序。这三种调试方法的区别主要在于,目标机远程调试stub 的存在形式的不同,而其设计思路和实现方法则是大致相同的。

而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。

一、配置编译及安装下载


1. 到http://www.gnu.org/software/gdb下载gdb-6.8.tar.gz到/tmp目录



2. 解压到/opt目录下
#cd /opt
#tar xzvf /tmp/gdb-6.8.tar.gz



3. 建立配置文件、编译
gdb允许把编译配置和编译结果放到任意的目录,因此可以在gdb目录之外建立一个专门存放编译结果目录.
#cd /opt
#mkdir -p arm-gdb/build
#cd arm-gdb/build
#/opt/gdb-6.8/configure --target=arm-linux --prefix=/opt/arm-gdb
#make
#make install



(--target配置gdb的目标平台,--prefixp指定了编译结果的存放位置,也就是安装目录。编译完后可以在/opt/arm-gdb/bin目录下找到可执行的arm-linux -gdb, arm-linux -gdbtui, arm-linux-run。 拷贝arm-linux-gdb 到/usr/bin目录
#cd /opt/arm-gdb/bin/
#cp arm-linux-gdb /usr/bin/



4. gdbserver的移植
gdbserver要用到gdb源码目录下的一些头文件,因此无法在gdb源码目录之外编译文件。

进入gdb/gdbserver目录:

[root@dding gdbserver]# pwd

/opt/gdb-6.8/gdb/gdbserver

[root@dding gdbserver]# 必须在gdbserver目录下运行配置命令,此时才能用相对路径

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

(--target=arm-linux表示目标平台,--host表示主机端运行的是arm-linux-gdb,不需要配置—prefix,因为gdbserver不在主机端安装运行)

#make CC=/usr/bin/arm/4.3.2/bin/arm-linux-gcc

(这一步要指定你自己的arm-linux-gcc的绝对位置,我试过相对的不行,提示make: arm-linux-gcc: Command not found,可好多人都用的相对路径,即直接赋值arm-linux-gcc,可采取make时传递参数,也可以直接修改gdbserver目录下的Makefile文件中的环境变量CC)



没有错误的话就在gdbserver目录下生成gdbserver可执行文件,注意此时要更改其属性,否则可能会出现无法访问的情况,chmod 777 gdbserver将其更改为任何人都可以读写执行;使用arm-linux-strip命令处理一下gdbserver,将多余的符号信息删除,可让elf文件更精简,通常在应用程序的最后发布时使用;然后把它烧写到flash的根文件系统分区的/usr/bin(在此目录下,系统可以自动找到应用程序,否则必须到gdbserver所在目录下运行之),或通过nfs mount的方式都可以。只要保证gdbserver能在开发板上运行就行。



二、gdb+gdbserver nfs调试流程
下面就可以用gdb+gdbserver调试我们开发板上的程序了。在目标板上运行 gdbserver,其实就是在宿主机的minicom下。连接主机和开发板.我选择了串口线和网线连接起了主机和开发板连接好电源,串口线,网线,打开串口终端.

通过NFS启动系统后,在开发板终端输入

# mount -t nfs -oonolock192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia  /mnt/

hello程序放在root_qtopia  下面.hello为要调试的程序(必须-g加入调试信息)。

# arm-linux-gcc -g -o hello hello.c



要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令:

#cd /mnt/

#gdbserver 192.168.50.72:2345 hello



192.168.50.72为宿主机IP,在目标系统的2345端口(你也可以设其他可用的值,当然必须跟主机的gdb一致)开启了一个调试进程,hello为要调试的程序(必须-g加入调试信息)。

出现提示:



Process /mnt/hello created: pid=80

Listening on port 2345

(另一个终端下)

#cd /opt/FriendlyARM/mini2440/root_qtopia 

#arm-linux-gdb hello

最后一行显示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”...,如果不一致说明arm-linux-gdb有问题

说明此gdb在X86的Host上运行,但是调试目标是ARM代码。

(gdb) target remote 192.168.50.168:2345

(192.168.50.168为开发板IP)



Remote debugging using 192.168.50.168:2345

[New thread 80]

[Switching to thread 80]

0x40002a90 in ??()

同时在minicom下提示:

Remote debugging from host 192.168.50.72(gdb)





注意:你的端口号必须与gdbserver开启的端口号一致,这样才能进行通信。建立链接后,就可以进行调试了。调试在Host端,跟gdb调试方法相同。注意的是要用“c”来执行命令,不能用“r”。因为程序已经在Target Board上面由gdbserver启动了。结果输出是在Target Board端,用超级终端查看。连接成功,这时候就可以输入各种GDB命令如list、run、next、step、break等进行程序调试了。





建立连接后进行gdb远程调试和gdb本地调试方法相同
分享到:
评论

相关推荐

    gdb+gdbserver的方式进行ARM程序调试

    通过gdb+gdbserver的方式进行ARM程序调试,能够有效地帮助开发者解决嵌入式系统开发中的各种问题。这种方式不仅适用于简单的程序调试,也适合复杂程序的深入分析。掌握这一调试方法对于嵌入式软件工程师来说至关重要...

    gdb+gdbserver安装及调试(总结).pdf

    由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,所以通常采用 GDB+GDBSERVER 的方式进行调试。 GDB+GDBSERVER 的安装过程可以分为以下几个步骤: 1. 下载 GDB 的源代码包,地址为 ftp://ftp.gnu....

    Gdb+gdbserver嵌入式目标板的调试梁玉锋.pdf

    3. 使用gdbserver调试用户空间程序:这是最常见的调试方式,适用于调试用户级别的应用程序。gdbserver在目标机上运行,接收并执行宿主机GDB的命令,调试用户空间程序。 在采用gdb+gdbserver调试时,首先需要在宿主...

    gdb+gdbserver安装及调试(总结).docx

    由于嵌入式系统资源有限,通常无法直接在目标系统上进行调试,因此gdb+gdbserver的远程调试方法尤为重要。它允许开发者在宿主机上使用强大的gdb工具,同时在目标机上运行程序,便于高效地定位和解决问题。 **2. ...

    arm-linux-gdb+gdbserver环境搭建以及远程调试

    总的来说,`arm-linux-gdb`和`gdbserver`的结合使用,使得开发者能够在本地Linux系统上对远程ARM设备上的程序进行调试,极大地提高了开发效率和问题排查能力。在实际操作中,确保网络连接稳定,以及正确配置目标设备...

    gdb+gdbserver调试使用手册

    ### gdb+gdbserver调试使用手册 #### 一、gdb与gdbserver概述 - **gdb**:GNU调试器(GNU Debugger)是GNU项目的一部分,它是一种强大的开源调试工具,广泛应用于C/C++等语言编写的程序的调试过程中。gdb允许...

    gdb+gdbserver

    通过这种方式,开发者可以在不离开Windows开发环境的情况下,利用gdb的强大功能,对Android设备上的程序进行高效、精确的调试。这种方法对于解决Android应用的复杂问题,尤其是那些只在实际设备上出现的错误,非常有...

    使用QT+gdbServer调试.docx

    针对基于海思3536平台的应用程序,利用QT+gdbServer进行远程调试是一种常用且有效的调试手段。本文将详细介绍如何在海思3536平台上配置和使用gdbServer与QT进行应用程序的调试。 #### 二、编译gdb和gdbServer 为了...

    gdb-8.1+gdbserver+移植文档.zip

    资源中包含gdb-8.1.tar.gz的源码+arm板gdb...arm板上对程序在线调试,一般使用的就是gdb+gdbserver。而我们的交叉编译工具链中,都带有gdb(`arm-linux-gnueabihf-gdb`),所以我们移植的时候,只需要移植`gdbserver`就行。

    编译安装gdb+insight和gdbserver远程调试

    本文将详细介绍如何在Linux环境下编译安装GDB、Insight图形化调试器以及GDBServer,以便进行远程调试ARM开发板上的native应用程序。 首先,我们来看GDB(GNU Debugger)的编译安装过程。GDB是一个强大的源代码级...

    嵌入式linux下移植gdb和gdbserver调试工具源码

    GDBserver则是一个轻量级的远程调试代理,允许GDB在主机上远程控制目标设备上的程序执行。本教程将详细介绍如何在嵌入式Linux环境下移植并使用GDB和GDBserver。 首先,你需要下载GDB和GDBserver的源码包,版本为gdb...

    制作GDB和GDBServer,arm-linux-gdb.pdf

    通过在目标设备上运行GDBServer,然后在开发环境中使用GDB连接到GDBServer,可以对运行在目标硬件上的程序进行调试。这对于没有图形界面或无法直接访问的目标系统尤其有用。 在实际操作中可能会遇到问题,比如配置...

    arm-linux-gdb-gdbserver

    1. **远程调试**:允许开发者在宿主机上使用 GDB 连接到运行在 ARM 设备上的 gdbserver,进行程序的调试工作。 2. **断点管理**:设置、删除和检查程序执行过程中的断点,帮助定位问题。 3. **变量查看**:实时查看...

    用Eclipse和GDB构建ARM交叉编译和在线调试环境

    在进行GDB调试之前,确保目标系统已安装gdbserver,并且宿主机已安装针对ARM平台编译好的GDB。由于嵌入式系统资源有限,大多数调试工作需要在宿主机上通过远程调试完成。 文章最后提到了配置、编译和安装GDB的过程...

    GDB远程调试.pdf

    在实际应用中,我们最常用的是调试应用程序,就是采用gdb+gdbserver的方式进行调试。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。...

    arm-linux-gdb&gdbserver;

    `arm-linux-gdb`是一款针对ARM架构的GNU调试器,它是GDB(GNU调试器)的特定版本,经过交叉编译以适应Linux环境下对ARM处理器的目标程序进行调试。GDB提供了一系列强大的调试功能,如设置断点、查看内存、单步执行、...

    linux下 利用eclipse与gdbserver远程调试代码

    Linux 下远程调试是一种常见的调试方式,利用 Eclipse 和 GDBServer,可以实现远程调试程序。本文将详细介绍如何使用 Eclipse 和 GDBServer 进行远程调试。 一、虚拟机下安装 Eclipse 和 GDBServer 首先,需要在...

Global site tag (gtag.js) - Google Analytics