某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于嵌入式系统资源比较有限,一般不能在目标板上直接构建GDB的调试环境,这时我们通常采用gdb+gdbserver的远程调试方法:gdbserver在目标板中运行,而gdb则在主机上运行。

构建gdb+gdbserver调试环境的在于,要将gdb和gdbserver都编译成适用于目标板的版本。比如我们用x86的主机和ARM目标板,平时在主机上直接调试的时候都使用用于x86调试的gdb,但这个gdb不能用于远程调试中,需要针对ARM平台进行配置之后重新编译才行;而gdbserver要运行在目标板上,则需要用arm-linux-gcc编译才行。

我们可以从http://ftp.gnu.org/gnu/gdb/ 或其他站点下载GDB的源代码来进行编译。得到源代码包gdb-6.6.tar.gz之后,将target配置成arm-linux,然后进行编译:

$ tar xzvf gdb-6.6.tar.gz

$ cd gdb-6.6

$ ./configure --target=arm-linux

$ make

$ make install

注意这时我们编译的是用于主机上的gdb程序,因此仍然用x86版本的gcc编译,而不是用arm-gcc。而接下来我们要编译的gdbserver程序则是运行在目标板上的,需要用arm-gcc来编译了,用CC=<your_arm-linux-gcc_path>来指定arm-linux-gcc编译器:

$ cd gdb/gdbserver/

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

$ make CC=/opt/toolchain/bin/arm-linux-gcc

$ make install

得到gdb和gdbserver之后,将gdbserver下载到目标板上就可以进行远程调试了。我们还是以前面用过的overflow程序为例来说明,注意overflow程序也需要重新用arm-linux-gcc编译得到ARM版本的overflow程序,并下载到目标板上。

完成这些之后可以用file命令来检查所准备gdb和gdbserver及overflow程序的格式是否正确:

$ file arm-linux-gdb

arm-linux-gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file overflow

overflow: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file gdbserver

gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

注意确保在目标板上运行的gdbserver及overflow程序被编译成ARM ELF格式,而gdb由于是运行在主机上,还是x86格式的。

gdb和gdbserver之间可以通过TCP(格式为host:port)、UDP(格式为udp: host:port)或者串口(比如/dev/ttyb)来通信,我们以TCP方式为例来说明。

假设目标板的IP为192.168.2.1,主机为192.168.2.100,使用端口5678来调试,首先在目标板上运行gdbserver:

# gdbserver 192.168.16.1:5678 ./overflow

Process ./overflow created; pid = 618

Listening on port 5678

然后在主机上运行gdb,并运行gdb命令“target remote 192.168.2.1:5678”:

$ arm-linux-gdb ./overflow

GNU gdb 6.6

Copyright (C) 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...

(gdb) target remote 192.168.2.1:5678

Remote debugging using 192.168.2.1:5678

0x28556080 in ??()

(gdb)

接下来你就可以象前面所介绍的那样使用gdb命令了,比如设置断点及查看变量单步执行等。

http://hi.baidu.com/zesu/blog/item/9b709c2b41802ef2e6cd4093.html

转载于:https://www.cnblogs.com/huaping-audio/archive/2009/06/19/1506898.html

用GDB Server进行远程调试相关推荐

  1. linux 编译 expat,xml-无法使用expat编译GDB以用于远程调试

    我一直在尝试在64位X86 Ubuntu上编译GDB的副本,以用于ARM设备的远程调试.这意味着使用expat编译GDB.连接到远程调试器时,GDB使用XML解析.这是我尝试过的一些方法以及结果. 用 ...

  2. 转:配置 SQL Server 2005 远程调试存储过程

    VS调试SQL存储过程的时候提示被用户取消 问题:     您工作的本机装有Visual Studio 2005,局域网中有一台SQL Server 2005数据库服务器,你想通过本机远程调试SQL ...

  3. eclipse gdb gdbserver 远程调试

    https://blog.csdn.net/linuxarmsummary/article/details/44975495 我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.0 ...

  4. 【GDB】gdbserver的使用,远程调试开发板

    0.将gdbserver拷贝到目标板子上 注:gdbserver在交叉编译工具目录/debug-root/usr/bin下 可用file命令查看 --------------------------- ...

  5. linux的gdb远程调试,嵌入式Linux的GDB远程调试如何实现呢?

    有道启新嵌入式研究院--远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用GDB标准远程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试s ...

  6. Ubuntu和Mac使用gdbserver远程调试android源码

    一.gdbserver在android上远程调试进程 0.关闭Enforcing # adb shell setenforce 01.拷贝gdb和gdbserver文件 <1>PC端为Cl ...

  7. linux gdb模式下无反应,Linux,GDB 嵌入式Linux的GDB远程调试的问题--断点没反应

    院士 2006-12-22 22:43:00    评分 2楼 问 我用的是BF531 uClinux Linux version 2.6.16.11-ADI-2006R1-hhbf (root@se ...

  8. GDB 远程调试试验(gdbserver)【ZT】

    一.基本原理 调试器是运行在host pc机的应用程序, 被调试的程序是运行在target上. 插桩(stub):在目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试. 调试器与被调程 ...

  9. 【GDB调试-5】远程调试

    文章目录 一.gdbserver 1.1 安装gdbserver 1.2 配置防火墙 二.gdbserver的启动与连接 2.1 gdbserver启动 2.2 gdb连接 三.gdb远程调试stm3 ...

最新文章

  1. 用拓扑排序检测有向图中是否有环
  2. Ubuntu13.04下使用dnw
  3. JVM发生频繁 CMS GC,罪魁祸首是这个参数!
  4. .net core学习
  5. cdh界面 hue 配置hbase_海量数据存储技术之HBase:使用HBase Shell操纵HBase
  6. js基本函数和基本方法
  7. gini系数 决策树_决策树系列--ID3、C4.5、CART
  8. MFC中的问题记录 2012-2-20
  9. 移动web点5像素的秘密(转)
  10. iec611313标准下载_iec611313编程标准.ppt
  11. 关于银河麒麟服务器操作系统里使用TongWeb做为应用服务器出现的前台提交中文后台获取到的是乱码的问题处理思路
  12. BetterJoy蓝牙将switch转化为xbox玩游戏,例子:双人成行(俄区版)
  13. mac chrome更新错误12
  14. 那些年,Java程序员用过的开发工具
  15. [laravel]laravel8自动生成api文档
  16. 2022 年最值得学习的 10 种编程语言 [更新]
  17. 项目管理--项目组织
  18. Android后台监听耳机(线控、蓝牙)按键事件
  19. Docker下载速度慢,怎么解决?
  20. 如何挑选h5制作公司?

热门文章

  1. 最新70佳单页网站设计案例欣赏(上篇)
  2. R-Tree空间索引算法的研究历程和最新进展分析
  3. Linux C/C++多线程pthread实例
  4. 汽车电子专业知识篇(七)-什么是XCP协议
  5. 少儿编程100讲轻松学python(二)-python cv2模块怎么安装
  6. epic转移游戏_Epic游戏商城更改退款政策 和steam一模一样
  7. swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类
  8. 程序员养家活口接私活必备网站(顺便用技术改变世界)
  9. 计算机专业常用图论,同等学力申硕计算机专业--数学公式集合(新增学习笔记)...
  10. Windows安全配置加固