嵌入式Linux开发系列- CDT远程调
来源:互联网 发布:手机哼歌识曲的软件 编辑:程序博客网 时间:2024/05/01 10:29
最近在做一个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. 新建一个调试选项
上图中:
C/C++ Application 指的是当前项目中生成的可执行文件。
Remote Absolute File Path for C/C++ Application: 指对于远程主机而言的程序路径(调试试将会下载到此处)
(b) 添加一个连接。在上图中点击 New 会出现:
在这自然选择SSH Only。下一步:
输入远程主机的IP地址,以及给当前连接命名。按FINISH结束设置。
(c) 配置本地交叉工具链:
在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:
运行调试 选中自己刚刚定义的种类:
调试结果如下:
- 嵌入式Linux开发系列- CDT远程调
- 嵌入式Linux开发系列之一
- 嵌入式Linux开发系列之一: 走进嵌入式Linux的世界
- 嵌入式Linux开发系列之一: 走进嵌入式Linux的世界
- 嵌入式Linux开发系列之一: 走进嵌入式Linux的世界
- 嵌入式Linux开发系列之一: 走进嵌入式Linux的世界
- Eclipse远程开发调试Linux应用程序,Eclipse+cdt+Uniwin+Ubuntu+gcc+gdb,打造超级Linux开发平台
- Eclipse远程开发调试Linux应用程序,Eclipse+cdt+Uniwin+Ubuntu+gcc+gdb,打造超级Linux开发平台
- 嵌入式开发远程调试arm-linux-gdb的移植
- 关于利用 eclipse+CDT 进行嵌入式平台开发的调研
- RedHat 系列 Linux 安装后,建立嵌入式开发环境
- linux下eclipse+CDT开发c/c++
- 用Eclipse + CDT开发C/C++ ------- 远程调试
- Windows嵌入式开发系列课程
- 2011-04-16 嵌入式Linux开发——SSH远程登录
- Qt Creator远程调试嵌入式ARM开发板上的Linux程序
- 嵌入式开发(ARM9)学习笔记(六)-Linux远程登录
- 嵌入式 Linux 开发简介
- 基于netty的项目中使用protobuf,巧妙定义proto完成不同消息的编码和解码处理 .
- 一个maven工程的pom.xml模版
- 在AppDelegate.m外实现navigation controller
- Eclipse状态栏显示JVM内存使用情况的改进
- hdu 1030 Delta-wave
- 嵌入式Linux开发系列- CDT远程调
- Java学习第一期
- 学习笔记 (Linux下subversion服务端多版本库配置) [第五课-可忽略]
- 简明Python教程
- Ext js技术之不能关闭的窗口
- 《高效学习OpenGL》之 投影变换 glFrustum(),gluPerspective(),glOrtho(),gluOrtho2D()
- MapReduce高级编程——自定义InputFormat
- 服务好“最后一公里”,高效CDN架构经验
- mini210嵌入式环境搭建