eclipse平台介绍及怎样使用Eclipse平台调试您的软件项目.doc_第1页
eclipse平台介绍及怎样使用Eclipse平台调试您的软件项目.doc_第2页
eclipse平台介绍及怎样使用Eclipse平台调试您的软件项目.doc_第3页
eclipse平台介绍及怎样使用Eclipse平台调试您的软件项目.doc_第4页
eclipse平台介绍及怎样使用Eclipse平台调试您的软件项目.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

怎样使用Eclipse平台调试您的软件项目 发布时间:2005.05.12 11:15 来源:IBM DW作者:Paul Leszek调试是程序员无法回避的工作。调试方法有许多种,但归根结底,就是找到引发错误的代码。举例来说,在 Linux 应用程序中,分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存并因为分段违例而终止时,将产生这种错误。要修正这种错误,您需要找到引发该行为的那行代码。一旦找到有问题的代码行,这对于知道引发错误的上下文及其相关的值、变量和方法也是有所帮助的。使用调试器将使查找这些信息变得相当简单。Eclipse 调试器及 Debug 视图Eclipse 平台的特色在于内置了 Java 调试器,该调试器提供所有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。此外,您还可以调试在远程机器上运行的应用程序。Eclipse 平台主要是一个 Java 开发环境,但其体系结构同时也向其它编程语言开放。如以下您将看到的,同一个 Eclipse 的 Debug 视图也可用于 C 和 C+ 编程语言。Eclipse 平台工作台(Eclipse Platform Workbench)及其工具是基于 Java 开发工具(JDT)组件所构建的。这些组件向 Eclipse 提供以下功能:1、项目管理工具2、透视图和视图3、构建器、编辑器、搜索和构建功能4、调试器Eclipse 调试器本身是作为 Eclipse 二进制文件中包含的标准插件而存在的。Eclipse 还有一个特别的 Debug 视图,允许您在工作台中管理程序的调试和运行。它为调试中的每个目标显示其暂挂线程的堆栈帧。程序中的各个线程以作为树的节点出现,而 Debug 视图则显示运行中的各目标的进程。如果暂挂一个线程,则其堆栈帧显示为子元素。在您开始使用 Eclipse 调试器之前,假定您已经安装了适当的 Java SDK/JRE(我推荐您使用 Java VM 1.4)和 Eclipse 平台 SDK 2.0/2.1,且两者都工作正常。一般来说,先使用 Eclipse 样本来测试一下调试选项是一个好主意。如果您要开发和调试 C/C+ 项目,您还需要得到并安装 C/C+ 开发工具(C/C+ Development Tool,CDT)。有关 Java SDK/JRE、Eclipse 平台和样本以及 CDT 的链接,图1显示了 Debug 用户界面的常规视图。图 1. Eclipse Debug 视图用户界面的常规视图调试 Java在您能调试您的项目之前,需要先完整地编译和运行代码。您首先需要为您的应用程序创建运行配置并确认其正常启动。之后,您需要使用 Run Debug.菜单,以同样的方式设置调试配置。您还需要选择作为主 Java 类的由调试器使用的类(也请参阅 图 2)。对一个项目,您希望有几种调试配置就可以有几种。当调试器启动后(通过 Run Debug.),会在一个新窗口打开它,您可以准备开始调试。图 2. 在调试配置中设置项目的主 Java 类以下是最常见的 Eclipse 调试操作的示例指示信息:设置断点当您启动应用程序以进行调试时,Eclipse 自动切换到 Debug 透视图。无庸置疑,最常见的调试过程就是设置断点,以允许检查在条件语句和循环中的变量和值。要在 Java 透视图的 Package Explorer 视图中设置断点,双击所选的源代码文件,在编辑器中打开它。遍历全部代码,将光标放置在含有可疑代码的那一行的标记栏上(在编辑器区域的左侧)。双击以设置断点(也请参阅 图 3)。图 3. 在编辑器左侧边缘可看到两个断点标记现在通过 Run Debug.菜单启动调试会话。有一点很重要,不要把数条语句放在同一行,因为您不能在同一行的多条语句上单步跳过或设置行断点(也请参阅 图 4)。图 4. 视图通过左侧边缘的箭头指出当前正在执行的行条件断点一旦您找到出错的地方,您会想要了解在崩溃前程序在干些什么。完成该工作的一种方法是单步执行程序中的每条语句,一次一句,直到到达出问题的地方。有时候更好的方法是仅运行某段代码并在出问题的地方终止其执行,这样就可以检查该位置上的数据。要实现这一点,可能要声明每当表达式的值更改时就被触发的条件断点(请参阅 图 5)。此外,在输入条件表达式时还可以使用代码辅助。图 5. 设置条件断点触发器对表达式求值要在 Debug 透视图的编辑器中求表达式的值,选中设置有断点的一整行,并在上下文菜单中选择 Inspect 选项(请参阅 图 6)。表达式是在当前堆栈帧的上下文中求值的,其结果显示在 Display 窗口的 Expressions 视图中。图 6. 用 Inspect 选项求表达式的值查看变量Variables 视图(在 Display 窗口中)显示了选中的堆栈帧中的变量值(请参阅 图 7)。要查看所请求的变量,只需展开 Variables 视图中的树直到您看到所请求的元素为止。您也可以在 Debug 视图中单步执行代码的同时,在 Variables 视图中查看变量。图 7. 在 Display 窗口中查看变量当调试器在断点上停止时,您可以通过在 Run Debug.菜单上选择 Step Over 选项来继续调试器会话(请参阅 图 8)。这将单步跳过突出显示的代码行并执行同一个方法中的下一行(或者它在调用当前方法的方法中继续)。作为最后一步的结果而发生更改的变量用颜色突出显示(缺省值是红色),所用颜色可在“Changed Variable Value Color”首选项(由 Debug Variable Views 指定)中指定。图 8. Run. 菜单中的调试器命令要在 Debug 视图中暂挂线程的执行,选择一个运行中的线程并单击 Debug 视图工具栏中的 Suspend按钮。会显示该线程的当前调用堆栈,并且在 Debug 透视图的编辑器中突出显示当前执行的行。暂挂线程时,将光标放置到 Java 编辑器中的变量上,该变量的值显示在一个小悬浮窗口中。同样,该线程的顶部堆栈帧被自动选中,该堆栈帧中的可视变量显示在 Variables 视图中。可以通过在 Variables 视图中单击变量名来检查相应的变量。热交换错误修正:实时代码修正如果您运行的是 JVM 1.4(Java 虚拟机,Java Virtual Machine),Eclipse 2.0.2 和 2.1 提供一个叫做热交换错误修正(Hotswap Bug Fixing)的新功能(无法用于 JVM 1.3 或更低版本 也请参阅 图 9)。它允许在调试器会话过程中更改源代码,这要比“退出应用程序,更改源代码,重新编译,再启动另一个调试会话”的一系列步骤好多了。要使用该功能,只需在编辑器中更改代码并恢复调试。由于 JVM 1.4 与 Java 平台调试器体系结构(Java Platform Debugger Architecture,JPDA)兼容,所以能使用该功能。JPDA 实现了在运行中的应用程序中用经过修改的代码进行替换的能力。当然,当启动您的应用程序或找到出错点需要花费很长时间的时候,该功能极其有用。图 9. 热交换错误修正功能不能在JVM1.3及更低版本中使用如果您完成调试时程序还没有被完整地执行过,请在 Debug 视图中的上下文菜单中选择 Terminate 选项。一个常见的错误是您在调试器会话中使用了 Debug 或 Run 而不是 Resume。这样将会启动另一个调试器会话,而不是继续当前的会话。远程调试Eclipse 调试器提供了一个有趣的选项,可用于调试远程应用程序。它可以连接到一个运行 Java 应用程序的远程 VM 上,并将其连接到内部调试器上。处理远程调试会话非常类似于本地调试。不过,远程调试配置要求对 Run Debug.窗口进行不同的设置。您首先要选择左侧视图中的 Remote Java Application 项,单击 New按钮。这样就创建了一个新的远程启动配置,并显示三个选项卡:Connect、Source 和 Common。在 Connect 选项卡的 Project 域中,选择用作启动首选项的项目(用于查找源代码)。在 Connect 选项卡的 Host 域中,输入运行 Java 程序的远程主机的 IP 地址或域名。在 Connect 选项卡的 Port 域中,输入远程 VM 接受连接的端口。一般来说,该端口是在远程 VM 启动时指定的。当您想让调试器确定 Terminate 命令在远程会话中是否可用,可以选择 Allow termination of remote VM 选项。如果您希望能终止所连接的 VM,则选择该选项。现在当您选择 Debug 选项时,调试器将尝试按指定的地址和端口连接远程 VM,并在 Debug 视图中显示结果。如果启动器无法连接至指定位置上的 VM,将显示错误消息。一般来说,远程调试功能的可用性完全取决于远程主机上运行的 Java VM(虚拟机,Virtual Machine)。 图 10显示了远程调试会话的连接属性的设置。图 10. 设置远程调试会话的连接属性调试其它语言Java 是 Eclipse 平台的主语言。然而,Eclipse 平台同时也是一个可支持许多其它语言的可扩展平台,而其中最重要的就是支持 C/C+(因为其流行性)。Eclipse 通过用 C/C+ 开发工具(CDT)支持 C/C+。请参阅 参考资料以获取相关链接。CDT 通过调试 C/C+ 代码的功能扩展了标准的 Eclipse Debug 视图,同时 CDT Debug 视图允许您在工作台中管理 C/C+ 项目的调试。CDT 不包含其内部调试器,但它向必须可在本地使用的 GNU GDB 调试器提供了一个前端。下载并安装了 CDT 之后,只需切换到 Debug 视图,您就可以开始调试当前的 C/C+ 项目了(请参阅 参考资料,以获取一篇介绍如何安装 CDT 的文章的链接)。这样您可以设置(并在执行过程中任何时候更改)代码中的断点,并且跟踪变量和寄存器。Eclipse 调试器显示您调试中各个目标的暂挂线程的堆栈帧。程序中的各个线程作为树的节点出现。它显示了运行中各目标的进程。请记住当 GNU GDB 调试一个带有调试符号链接的程序时,它最有效。这是在编译过程中由命令行参数 -g 来实现的。需要更多的信息请使用 -ggdb 开关,该参数包含有特定于 GNU GDB 的调试符号。如果您要调试 servlet,使用 Sysdeo Eclipse Tomcat Launcher。该插件使您能够管理 Tomcat 4.x/3.3 servlet 容器(通过创建和导入一个 Tomcat WAR 项目)。它同时在一个内部 Java Eclipse 调试器中注册一个 Tomcat 进程,这样您就能方便地调试 Tomcat 应用程序了。还有其它几个 Eclipse 插件,使我们能够对 servlet 使用内部 Eclipse 调试器,比如 Cactus 的 Eclipse 插件,Resin 插件和 X-Parrots ServletExec 插件。Eclipse 是什么?Eclipse 是一种基于 Java 的可扩展开源开发平台。就其自身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括为人熟知的 Java 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+ 和 COBOL 等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect(参见 参考资料),它构成了 IBM Java 开发工具系列的基础。Eclipse 是开源的开源软件是通过许可证发行以确保授予用户某些权利的软件。当然,最明显的一点是,源代码必须可用,从而用户可以自由地修改和重新发布软件。这种用户权利保护可通过称为 copyleft 的设备实现:软件许可证声明了版权保护和禁止发布,除非用户被授予了这些权利。copyleft 还要求所有重新发布的软件使用原软件的许可。因此,这实际上倒置了版权的目的 使用版权来授予用户权利,而不是为软件的开发者保留版权 copyleft 经常被描述为 “保留所有版权”。曾经四处蔓延的对开源软件的许多恐惧、担忧和疑虑,都与某些 copyleft 许可证的所谓 “病毒” 性质有关 如果使用开源软件作为您开发的程序的一部分,您将失去自己的知识产权,因为该许可证将“感染”您开发的专有部分。换句话说,该许可证可能要求与开源软件一起打包的所有软件,都必须在相同的许可证之下发布。虽然这对最著名的 copyleft 许可证(即 GNU 通用公共许可证,例如 Linux 就是在该许可证之下发布的)来说可能是事实,但当时还有其他许可证在商业化和社区考虑之间提供了较好的平衡。开放软件计划(Open Software Initiative)是一家非营利机构,它明确定义了开放源码的含义及满足其标准的认证许可证。Eclipse 是在 OSI 认可的 Eclipse 公共许可证(EPL)1.0 版之下被授予许可证的,EPL 旨在促进 Eclipse 的商业化使用而同时又能对开源作者保持公平。为 Eclipse 创建插件或将 Eclipse 用作软件开发应用程序基础的开发人员,需要发布他们在 EPL 下使用或修改的任何 Eclipse 代码,但是他们可以自由决定自己添加的代码的许可证授予方式。与出自 Eclipse 的软件一起打包的专有代码不需要作为开放源码来授予许可证,该源代码也不需要提供给用户。尽管大多数开发人员不会使用 Eclipse 来开发插件,或基于 Eclipse 创建新产品,但是 Eclipse 的开源性质所意味的并不只是使得 Eclipse 免费可用(尽管便于商业化的许可证意味着插件可能要花钱)。开放源码鼓励创新,并激励开发人员(甚至是商业开发人员)为公共开放源码库贡献代码。其中的原因很多,不过最本质的原因是为这个项目作贡献的开发人员越多,这个项目就会变得对每个人都越宝贵。随着此项目变得日益有用,更多的开发人员将会使用它,并围绕它形成一个社区,就像那些围绕 Apache 和 Linux 形成的社区一样。(有关许可证的更多信息,请参阅 参考资料。)回页首Eclipse 是什么?Eclipse 是个开源社区,其项目大都集中于构建开放的开发平台,该平台由可扩展的框架、工具和运行库组成,用来跨生命周期构建、部署和管理软件。Eclipse Foundation 是一个非盈利性会员性质的组织,主管 Eclipse 项目和协助发展开放源码社区及补充成品和服务的生态系统。Eclipse Project 最初由 IBM 在 2001 年 11 月创建并得到了软件厂商联盟的支持。Eclipse Foundation 则作为一个独立的非盈利性组织于 2004 年 1 月创建,其职能是充当 Eclipse 社区的 “干事”。它的创建旨在让独立于厂商的开放、透明的社区得以围绕 Eclipse 繁荣起来。现在,Eclipse 社区的组成涵盖了软件行业不同层面的组织和个人。Eclipse Foundation 负责管理和指导 Eclipse 的现行发展。该基金会为社区提供服务,但并不雇佣任何实际致力于 Eclipse 项目开发的开放源码开发人员(称为 提交者)。Eclipse 提交者一般都是受雇于组织或是自愿为开放源码项目贡献时间的独立开发人员。现在我们已经考察了 Eclipse 背后的一些理论、历史和管理,下面让我们考察该产品本身。回页首Eclipse 工作台在第一次打开 Eclipse 时,首先看到的是工作台中的欢迎页面(参见图 1)。作为一个 Eclipse 用户,您可以有几个选项可选:可以进入概览页面(这也是我推荐的做法,参见图 2),也可以看看有何新特性、浏览一些示例或阅读一些教程。图 1. Eclipse 欢迎页面图 2. Eclipse 概览页面Eclipse 工作台由几个称为视图 的窗格组成,比如 Navigator 或 Outline 视图。这些视图的集合称为透视图。其中最为常见的透视图之一是 Resource 透视图,它是一个基本的通用视图集,用于管理项目以及查看和编辑项目中的文件。我建议新手用户从图 2 所示的概览页面开始了解和熟悉 Eclipse。这个工作台的基本部分包含了大量有关 Eclipse 的组成部分以及各部分之间如何互动的优秀入门信息。请花几分钟时间阅读一下这些资料,之后我们就可以直接开始探究 Eclipse 中的 Java 开发工具(Java Development Tools,JDT)了。实践才是最好的学习方法。为了继续这个简短的 Eclipse 学习之旅,我们需要创建一个新的 Java 项目。选择 File New Java Project,当系统提示要求提供项目名称时,输入 Hello ,然后单击 Finish。接下来,我们将对 Java 透视图(如果您已经在此)稍作介绍。根据想要管理屏幕的方式的不同,可以更改当前窗口中的透视图,方法是选择 Window Open Perspective Java,也可以通过选择 Window New Window 和新的透视图来打开一个新窗口。正如您所预期的那样,Java 透视图具有一组更适合 Java 开发的视图。左上角的这个视图就是其中之一,该视图是一个包含了各种 Java 包、类、JAR 以及其他文件的层级结构。此视图被称作包浏览器(Package Explorer)。此外,此主菜单也已经扩展包括了两个菜单项:Source 和 Refactor。回页首Java 开发工具 (JDT)为试验一下 Java 开发环境,我们将创建并运行一个 Hello World 应用程序。使用 Java 透视图,右键单击 Hello 项目,从 Hello 项目的源文件夹 (src) 选择 New Class,如图 3 所示。在随后出现的对话框中,键入 Hello 作为类名称。在 Which method stubs would you like to create? 下面,选中 public static void main(String args) 复选框,然后单击 Finish。图 3. 在 Java 透视图中创建新类这样将在编辑器区域创建一个包含 Hello 类和空的 main() 方法的 .java 文件,如图 4 所示。然后向该方法添加如下代码(注意其中 i 的声明是有意省略了的):图 4. Java 编辑器中的 Hello 类您会在键入时注意到 Eclipse 编辑器的一些特性,包括语法检查和代码自动完成。当您键入开括号或双引号时,Eclipse 会自动提供配对的符号,并将光标置于符号对之内。在其他情况下,您可以通过按 Ctrl+1 来调用代码自动完成功能。代码自动完成提供了上下文敏感的建议列表,可通过键盘或鼠标来从列表中选择。这些建议可以是针对某个特定对象的方法列表,也可以是基于不同的关键字(比如 for 或 while)来展开的代码片段。语法检查依赖增量编译。每当您保存代码,它就在后台接受编译和语法检查。默认情况下,语法错误将以红色下划线显示,一个带白 X 的红点将出现在左边沿。其他错误在编辑器的左边沿通过灯泡状的图标来指示;这些就是编辑器或许能为您修复的问题 即所谓的 Quick Fix(快速修复)特性。上面的代码例子在 for 语句后面有一个灯泡状图标,因为 i 的声明被省略了。双击该灯泡状图标将调出建议的修复列表。在此例中,它将提供创建一个类字段 i、一个局部变量 i 或一个方法参数 i 的建议;单击其中的每一个建议都会显示将要生成的代码。图 5 示了该建议列表和建议创建一个局部变量之后所生成的代码。图 5. Quick Fix 建议双击该建议就会把建议代码插入到代码中的恰当位置。一旦代码无错误地编译完成,您就能够从 Eclipse 菜单上选择 Run 来执行该程序(注意这里不存在单独的编译步骤,因为编译是在您保存代码时进行的。如果代码没有语法错误,它就可以运行了)。这时会出现一个具有适当默认设置的 Launch Configurations 对话框;请单击右下角的 Run。一个新的选项卡式窗格将出现在下面的窗格(控制台)中,其中显示了程序的输出,如下图所示。图 6. 程序的输出也可以在 Java 调试器中运行程序。首先双击编辑器视图左端的灰色边沿,从而在调用 System.out.println() 之后的 main() System.out.println() 中设置一个断点。一个蓝色的点会随即出现。从 Run 菜单,选择 Debug。正如上面描述的,这时会出现一个 Launch Configurations 对话框。选择 Run。透视图将自动切换到 Debug 透视图,其中具有许多有趣的新视图,如下所示:图 7. Debug 透视图首先,请注意该透视图左上角的 Debug 视图。这个视图显示调用堆栈,并且标题栏中有一个工具栏,它允许您控制程序的执行,包括继续、挂起或终止程序、跟踪下一个语句、单步执行下一个语句,或者从方法返回。右上角的窗格包含许多选项卡式的视图,包括 Variables、Breakpoints、Expressions 和 Display。这里我单击了 Variables 视图,以便我们能够看到 i 的当前值。通过上下文敏感的帮助可以获得关于这些视图的更多信息:单击视图的标题,然后按 F1。回页首附加的插件除了像 JDT 这样用于编辑、编译和调试应用程序的插件外,还有其他一些可用的插件支持从建模、构建自动化、单元测试、性能测试、版本控制到配置管理的完整开发过程。Eclipse 附带了配合开放源码并发版本系统(Concurrent Versions Syst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论