Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试

转载 2012年03月21日 13:27:29


做嵌入式Linux开发也不用再羡慕windows程序员VS集成开发环境的强大,我们同样能够搭建出给力的IDE。

今天在这里记录一下我使用Eclipse-cdt,gdb,gdbserver搭建远程arm调试的过程。

首先介绍下,嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端可以理解为本机,Target端为嵌入式设备。
Host端使用arm-linux-gdb,Target 端使用gdbserver。
调试时,应用程序在嵌入式目标系统上通过运行,而gdb调试在Host端。

    1. 编译gdb
      在GNU官网下载最新版GDB ,我这里下载的是7.2版本gdb-7.2.tar.gz
$ tar xvf gdb-7.2.tar.gz
$ cd gdb-7.2
$ ./configure --target=arm-linux --prefix=/home/aliang/arm-gdb
$ make -j2
$ make install

可以通过export命令将/home/aliang/arm-gdb/bin目录加入PATH,使arm-linux-gdb可以直接使用,也可以直接拷贝到/usr/bin 或arm-linux-gcc同目录

    1. 编译gdbserver
$ cd gdb/gdbserver
$ ./configure --host=arm-linux
$ make -j2
这里没有定义安装目录,因为gdbserver是运行在嵌入式设备端的。
make之后,gdbserver程序就在当前目录下,拷贝到tftpd目录后在设备端通过tftp命令下载
  1. 调试程序
    通过加-g参数 交叉编译带调试信息的程序

    $ arm-linux-gcc -g ipcam.c -o ipcam

    拷贝到设备端后,使用gdbserver打开程序

    $gdbserver <host-ip>:10000 ipcam

    主机使用arm-linux-gdb调试程序

    $ arm-linux-gdb ipcam

    输入gdb远程调试指令

    (gdb) target remote <target-ip>:10000

    这时,设备端打印

    Remote debugging from host 192.168.1.102

    说明远程调试已经建立起,可以开始在host端调试

  2. gdb指令可真多,我不是牛人,自认没那技术通过指令就能调试出想要的结果,结合eclipse的图形调试界面快速寻找答案才是我想要的。



首先当然是使用CDT创建项目并添加源文件。

  1. 在左侧 Project Explorer 的项目名上点右键->Properties 进入项目属性设置
  2. 选择 C/C++ Build->Settings 在Tool Settings中,将Toolchain修改为arm版本
    GCC C Compiler :arm-linux-gcc
    GCC C Linker : arm-linux-gcc
    GCC C Assembler :arm-linux-ar

    其他选项默认就好,有需要自己修改



  3. [可选]Build Steps 这里可以填些编译步骤,我这里希望编译后自动将程序拷贝到tftpd的目录以方便arm端直接下载
    那么就在Post-build steps -> Command: 中填写

    cp ipcam /tftpboot

编译部分修改完,接下来是调试部分

  1. 选中项目->菜单栏 ”Run“->Debug Configurations…
  2. 双击C/C++ Applecation 新建一个配置,Eclipse会根据当前选择的项目初始化大部分配置,这里只需修改Debugger配置页
  3. 选择进入Debugger配置页
    Debugger:
    选择gdbserver Debugger
    Debugger Options: 
    GDB Debugger 这项,如果上一篇中编译出的的arm-linux-gdb拷贝到PATH的目录,或者将arm-linux-gdb的目录加入到PATH,那么这里直接填arm-linux-gdb就可以了,否则浏览目录选择带路径的命令Shared Libraries这项,可以添加库路径,比如调试过程中要步入外部函数,就必须在这里给出带调试信息的库文件路径,否则会找不到该函数的定义

    Connection这项是关键:Type选 TCP,Host name or IP address填arm端的ip,端口号默认即可,这个端口号将在arm端运行gdbserver时填写
  4. 所有配置完成,点Apple 再关掉配置页

开始调试

  1. 在arm端运行程序
    # tftp -g -r ipcam 192.168.1.100
    # gdbserver 192.168.1.100:10000 ipcam

    192.168.1.100是主机ip 10000是之前设定的端口

  2. 在Eclipse开始调试
转自:
http://bashell.sinaapp.com/archives/eclipse-cdt-gdbserver-arm-remote-debugging-1.html
http://bashell.sinaapp.com/archives/eclipse-cdt-gdbserver-arm-remote-debugging-2.html


看上一个并没有完全搞定,找了下一个才能用eclipse 远程高度
最近需要使用gdb 远程调试程序,远程计算机运行系统为debian4.0,调试主机系统是ubuntu10.04.
使用gdb命令调试也可以,但近期一直在eclipse cdt下工作,这些项目工程什么的统统搞在eclipse工作目录下了。这样使用gdb命令行不是很方便,于是有了这次的研究。
开始以为直接在eclipse cdt工程属性里面把debuuger中改为gdbserver debugger就可以了,发现改完了调试基本不行,好多问题。于是继续放狗,网上的资料比较零散,而且有很多都是侧重arm等平台交叉编译后remote debug的,我这里貌似都不用toolchain什么的,这俩系统基本一致,源码在调试机器写完去远程主机编译一下就可以。

经过一上午的整理,发现有几个关键点需要注意一下:

1.首先,对于这种远程调试的应用最好有个共享的文件系统,这样做起来比ftp,telnet什么的方便很多,我就是先在两台机器上弄好了nfs,然后使用共享把项目直接建立在共享目录下工作的。
ubuntu和debian貌似缺省安装都不带nfs,升级一下,调试主机作为nfs server,远程计算机mount上来。

2.eclipse cdt项目建立一定要选stadard makefile项目,别用那个managered的,这样才方便,反正我是没搞懂怎么把manangered项目搞到远程调试。而且即使是makefile项目也要检查下makefile文件,记得把-o编译选项删了,反正是debug,优化不优化无所谓,而且一旦有这个优化选项,就会发现好多断点断不到,编译器把这个优化后断点有时工作不正常。
项目建立无非是两种途径:第一次就是现在nfs共享目录下建立个makefile项目,然后就开始工作吧,编辑完代码一定记得在远程主机make一下;第二种就是导入项目,这里需要注意,这个导入别使用File-import菜单,直接还是建立makefile工程,location自己选,指向要导入项目路径,项目名称留空,然后继续,eclipse自己就会分析目录下的makefile文件并导入相应文件。(这里插一句,像需要不同平台的再导入后选择一下可执行文件的类型)。

3.具体调试步骤,远程机gdbserver ip:端口 进程  ,调试主机eclipse配置debugger时选择 GDB(DSF)
remote process laucher启动程序,记得gdbserver debugger选项页下正确配置远程机ip和端口,F11,启动调试。

这样一个调试环境就建立好了,而且这个环境只存在于调试主机里,远程机(被调试)到时只需mount到特定调试主机nfs目录就可以了,调试主机更改后只需要eclipse里重新导入一遍项目到nfs共享目录,调试环境
的两端都可以方便的建立起来。

http://hi.baidu.com/bobbeta/blog/item/8822db0ad218a8980a7b8236.html

相关文章推荐

使用gdb、gdbserver在ARM-Linux下进行远程调试

一、下载gdb-6.4.tar.gz源代码 http://ftp.gnu.org/gnu/gdb/ 二、编译 GDB 2.1、编译arm-linux-gdb #tar zxvf gdb-6.4...
  • heanyu
  • heanyu
  • 2011-03-24 21:17
  • 1746

qtcretor通过gdb和gdbserver远程调试arm程序

环境: Qt Creator:qtcreator2.7.1 Qt:qt4.7.0 ubuntu:12.04 arm-linux-gcc:4.5.1 gdb:7.6 一:编译arm-lin...

"Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver"-------续文

Dwarf Error: wrong version in compilation unit header (is 4, should be 2)

Windows远程调试Linux上的C++程序:Eclipse+MingW+Samba+GDBserver

转自:http://www.heimizhou.com/windows-remote-debug-linux-c-plus-plus.html 最近有一个需求,就是需要在Windows上远程调试...
  • lclwjl
  • lclwjl
  • 2016-05-19 09:31
  • 1505

Windows 下使用Eclipse CDT 远程调试 Linux C/C++ 程序

Linux 下调试大型C/C++程序对于一般的程序员来说是一件不容易的事情,GDB提供了强大的调试功能及丰富的调试命令,但界面友好性及用户体验不如VS调试工具(PS:很多大牛能把GDB使用的出神入化,...

在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)

原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8260018        最近需要使用CCSV5使用...
  • gqb666
  • gqb666
  • 2012-12-05 15:00
  • 3360

在ubuntu10.04成功移植gdbserver及gdbserver使用介绍(用于CCSV5.2远程调试ARM CORTEX-A8程序)

最近需要使用CCSV5使用gdbserver远程调试ARM cortex-a8的程序,移植成功gdbserve,使用的版本包是gdb-7.1,主机环境为ubuntu10.04,开发板挂载的nfs文件系...

arm远程调试 gdb和gdbserver

文章转载至:http://liu1227787871.blog.163.com/blog/static/205363197201261204950218/ 一、调试原理 这里的...

IDA + GDBServer实现iPhone程序远程调试

在早期的IDA中包含了一个iphoneserver的程序,这个程序就是配合IDA实现远程调试的。但是在最新版的IDA中这个东西已经不复存在了,因而下载的破解版的IDA中没有那个文件并不是被删除掉了,而...
  • eqera
  • eqera
  • 2014-02-05 00:26
  • 4493
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)