Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4454
  • 博文数量: 1
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-21 10:17
文章分类
文章存档

2014年(1)

我的朋友
最近访客

分类: 嵌入式

2014-01-03 15:02:21


        CodeBench是一款可以调试Linux应用程序的IDE开发工具,它可以调试Linux主机下的应用程序,也可以调试嵌入式Linux目标系统的应用程序。它的IDE软件环境是基于Eclipse开发的,内核还是基于GDB。

1.获取CodeBench
        CodeBench有不同版本,在Mentor的官网上下载试用版(一个月)来使用。如果需要商用版本的工具,可以跟Mentor购买,总体来说商用版本的CodeBench在功能上,C库的效率上等要比试用版好。所以,如果不差钱还是建议购买商用版本的工具。我这里下载的是最新版的Linux主机下的安装程序:sourceryg++-2013.11-29-i686-pc-linux-gnu.bin安装完成后,需要进行注册。该软件是根据用户ID来注册的,在Help->Sourcery CodeBench Licensing中进行注册,选择第二个注册选项,在弹出的页面中可以看到本机的HOST ID,根据此HOST ID,可以在Mentor的网站上下载到对应的注册文件,本文下载的文件为target.lic。将此文件加入注册后,即可使用CodeBench的常用调试功能。

2.调试准备
        CodeBench基本工程的建立,代码编辑,编译等等。这里就不过多描述,一般的程序员对此应该非常熟悉。需要说明的是,CodeBench中有一个比较重要的概念,那就是libc库的选择。我们在Windows 的IDE程序开发环境中,libc库一般都是默认本机的,但是Linux主机的libc库就可能不同。CodeBench提供两种选择:使用本机的Libc库,或者使用工具集成的libc库(Included libc).集成的libc库与本机的libc库的区别,个人理解是,执行效率上会有不同。推荐使用集成的libc库。但是使用集成的libc库会有一个问题,如果调试的是主机程序,那么调试时,在调试选项中需要明确指定是使用集成的libc;如果调试的是目标机的应用程序,那么有两个做法:第一,将目标主机的的libc库全部替换为tool自带的libc,其中涉及到目标主机的/lib,/usr/lib,/etc等目录,影响的是嵌入式主机的所有应用程序;第二,将集成的libc库安装到目标系统的特定目录,运行时调用sysroot-run来运行程序。
(1)Sysroot概念:
        为了能够使用集成的libc库,CodeBench引入了一个sysroot概念,此概念,个人的理解就是包含所有调试所需要的libc,gdb server等工具的一个简化rootfs。CodeBench的sysroot在安装目录i686-pc-linux-gnu/libc下,这是完整版本的sysroot,使用到嵌入式目标系统中的sysroot可以从i686-pc-linxux-gnu/packages中的压缩包中获得。
(2)安装sysroot
        本文主要针对的调试目标系统中的应用程序。所以,采用的方法是,直接将sysroot安装到目标系统中。方法比较简单:解压packages中的sysroot压缩包,将对应的文件拷贝到目标系统的rootfs中。因为目标系统本来采用的libc是2.11版本的,这里的集成libc是2.18版本,应该是可以向下兼容的。

3.调试目标系统的应用程序
        CodeBench IDE环境调试目标系统的应用程序主要有两种方式:一种为手动调试,另外一种为自动调试。我们在Windows主机上调试应用程序,比如vc,vs等的环境中编好代码,点击调试,程序会自动停在main的入口处。这样的调试方法跟Linux下相比,真的是很幸福,工具帮你做了几乎所有的铺垫工作,但是要调试嵌入式Linux的应用程序,就没有这么方便。需要自己搭建调试环境。既然都是基于GDB的内核实现的集成调试,那么调试方法就得参照GDB的调试了。
(1)手动调试
        其实,这里说手动,也不是那种敲入gdb命令的手动调试(传统的GDB调试,由于没有IDE环境,调试某一个应用程序,就需要掌握一大推的gdb调试命令,比如break,run,continue等),只是需要手动启动一下gdbserver就可以了。由于,sysroot已经安装到目标系统中,其中也包含了用于调试的gdbserver了,我们需要做的就是启动gdbserver。另外,这里的手动还有一个意思,那就是,当在主机上编译好要调试的程序,程序不能自动下载到目标系统中,需要手动下载进去,这一步也不是自动的。
当应用程序下载到目标系统中后,启动gdbserver:
        在目标系统中运行:gdbserver 192.168.0.100:10000 program1
        其中 192.168.0.100是主机的IP地址,后面的10000是端口号(可以使用其他系统不用的端口号),program1是所要调试的应用程序名称。

        那么,这样一个远程的gdbserver就已经运行起来,如果不用CodeBench IDE环境,在主机的命令行下进入gdb调试模式,键入gdb然后键入target remote 192.168.0.2:10000就可以在命令行下调试远程目标机的程序了。使用CodeBench,就可以脱离gdb的命令行操作了,但首先得设置好CodeBench的调试环境:
         
        请在上图中,不要选择copy and launch application on remote system(选上这一个则为自动调试模式);
        然后设置对应的gdbserver地址:
         
(2)自动调试模式
        相对手动调试默认,自动的方式比较方便,类似于在Windows主机的IDE环境中调试程序,设置好调试参数,不需要往目标机中拷贝调试程序和运行调试命令(gdbserver),点击Debug即可进入调试。自动调试其实包括两个步骤:第一步,下载调试程序,运行目标机的调试命令;第二步,进行调试。由于第一步的下载程序和在主机上运行目标机的调试命令,都需要一种连接并登陆目标机,一般的Linux系统采用SSH登陆到目标系统中。所以,在目标机中制作一个SSH server就成为自动调试的必要条件了。如何在目标机中制作SSH server,上篇文章已经详细介绍了。这里不再描述。需要说明的是,这里的SSH server其实需要支持ssh ftp,ssh console,以及ssh terminal。CodeBench设置:在上页图中,选上“Copy and launch application on remote system”,然后点击右边的“Connect”按钮进行设置,主要是设置此连接的名称;下面的remote path,可以不用设置,自动会下载到tmp目录下;也可以设置到目标机根文件系统的某个目录下。在“Debugger”页面中,保持与手动调试一样的设置即可。


总结:CodeBench 的IDE调试工具的使用,最重要的是要在目标机上实现sysroot和ssh server。其他的与普通的调试工具没有太大的差别。






阅读(1360) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~