嵌入式Linux开发系列- CDT远程调

最近在做一个arm linux下(for mini2440, mini6410) 的程序时发现,在PC上运行得非常好的程序,到了ARM板上就BUG了。为了找出ARM平台上的问题,必须实行调试。然而直接使用 gdb for arm是不明智的,一来gdb不容易编译成功,二来没有IDE的支持,调试效率很高。为此,使用远程调试是一个很好的办法。

为了实现CDT远程调试,必须满足以下几个条件:
1、交叉工具链中带有arm-linux-gdb
2、目标系统中有 gdbserver这个程序
3、编译程序、各种库时加入调试符号

一般来说,好的工具链都会自带GDB。而gdbserver可以从工具链中找到(可以使用搜索)。
编译程序和库时,加入-g 参数即可加入调试符号。自带编译系统的库可以通过相关参数控制,在此不必多说。


一、自动化地调试

在这里着重介绍这种方法。虽然配置比较复杂,但是一旦配置成功,其效果是在eclipse中调试远程程序和调试本机程序无区别,其方便程序可想而知,希望各位对此部分有信心。以前笔者也十分反感这种麻烦的配置,但如果你配置好了,不仅收获以后的极大方便,也收获很多的知识!

1、为目标系统设置NFS

这不必多说,NFS是调试嵌入式程序的利器。关于NFS的设置,参看本站另外的文章:从NFS启动Linux。

2、为目标系统编译SSH支持

CDT中支持好几种远程调试的方法,其中有telnet, ftp等等。其中最方便地就属SSH了,因为SSH同时支持命令行和文件传输。配置好SSH后,cdt 启动调试时,会使用sftp将程序下载到开发板内,然后使用ssh执行gdbserver并自动从本机连接调试。但是SSH本身是个麻烦的软件,因为它依赖OpenSSL!

(1) 编译OpenSSL

从openssl官网下载openssl。本文使用版本0.9.7m。交叉编译过程请自行参考网上文章。

(2) 编译OpenSSH

从openssh官网下载。交叉编译过程请自行参考网上文章。

(3) 设置OpenSSH

sshd,即SSH的服务器,运行需要以下几个准备工作:
a. 有一个单独的用户 sshd。可以添加到/etc/passwd中。具体格式请参考PC机上的/etc/passwd
b. 有一个单独的文件夹供使用:/var/empty。嵌入式板上若不可写,可建立在tmpfs之上。
c. 生成DSA、RSA公共key:使用 ssh-keygen 生成。
三个工作都顺利完成以后,可通过 /usr/sbin/sshd (这里指向具体的sshd路径)运行,无错误关闭后即已经运行为服务

3、CDT中设置远程方式

在这几步中,最难的是第2步。第2步完全弄好了以后,以后的日子就轻松了。

a. 新建一个调试选项

嵌入式Linux开发系列- CDT远程调_第1张图片

嵌入式Linux开发系列- CDT远程调_第2张图片

上图中:

C/C++ Application 指的是当前项目中生成的可执行文件。

Remote Absolute File Path for C/C++ Application: 指对于远程主机而言的程序路径(调试试将会下载到此处)

(b) 添加一个连接。在上图中点击 New 会出现:

嵌入式Linux开发系列- CDT远程调_第3张图片

在这自然选择SSH Only。下一步:

嵌入式Linux开发系列- CDT远程调_第4张图片输入远程主机的IP地址,以及给当前连接命名。按FINISH结束设置。

(c) 配置本地交叉工具链:

嵌入式Linux开发系列- CDT远程调_第5张图片

在Debugger选项卡中,GDB debugger一栏,选择你的交叉工具链中arm-linux-gdb。

好了,现在可以启动你的开发板,使用sshd,在CDT中可以直接运行该debug进行远程调试了!


本文平台:本文所讲的是linux平台,当然看完本文后windows平台的也是一样的原理,基本上一通百通了.

 

一:

linux远程调试原理( server+client):

  1.server:gdbserver

   命令:   gdbserver ip:port  appname(进程名)

       通常用下面这个命令:
       gdbserver ip:port --attach 22552(进程id)

  2.client:gdb

         命令: 终端输入gdb进去gdb 然后输入 target remote ip:port

  

  3.截图如下:

    server:

    

    client连接上后:

    

    client:

    

 

二:linux eclipse下的远程调试(当然前提是你所要调试的服务器 gdbserver已经开启了):

    1.打开 debug configurations

    

    2.创建一个自定义的 debug设置

    

    3.设置 debug的种类

    

    这里有三种种类  我们选择 gdb dsf manual remote debugging launcher (就是调试的时候 我们手动设置gdb参数进行调试)

    其它两种的区别就由读者自己试验了,这里并不说明.

    

    设置gdb ip port:

    

 

    运行调试 选中自己刚刚定义的种类:

    

 

  调试结果如下:

    

 


你可能感兴趣的:(调试,CDT)