Eclipse+调试及Debug+新手教程.doc_第1页
Eclipse+调试及Debug+新手教程.doc_第2页
Eclipse+调试及Debug+新手教程.doc_第3页
Eclipse+调试及Debug+新手教程.doc_第4页
Eclipse+调试及Debug+新手教程.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

网摘一调试是程序员无法回避的工作。调试方法有许多种,但归根结底,就是找到引发错误的代码。举例来说,在Linux应用程序中,分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存并因为分段违例而终止时,将产生这种错误。要修正这种错误,您需要找到引发该行为的那行代码。一旦找到有问题的代码行,这对于知道引发错误的上下文及其相关的值、变量和方法也是有所帮助的。使用调试器将使查找这些信息变得相当简单。Eclipse调试器及Debug视图Eclipse平台的特色在于内置了Java调试器,该调试器提供所有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。此外,您还可以调试在远程机器上运行的应用程序。Eclipse平台主要是一个Java开发环境,但其体系结构同时也向其它编程语言开放。如以下您将看到的,同一个Eclipse的Debug视图也可用于C和C+编程语言。Eclipse平台工作台(Eclipse Platform Workbench)及其工具是基于Java开发工具(JDT)组件所构建的。这些组件向Eclipse提供以下功能:项目管理工具透视图和视图构建器、编辑器、搜索和构建功能调试器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.热交换错误修正功能不能在JVM 1.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平台提供了内置的Java调试器,该调试器具有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。它还可以用于调试在远程机器上运行的应用程序。Eclipse平台主要是一个Java开发环境,但是同一个Eclipse的Debug视图也可用于C和C+编程语言。记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate,就连毕业设计也是用System.out找Bug的,想想真的很笨。开始工作后,一个星期过去了,在一个1、2百万行的系统中找Bug,我依然在用System.out,当时最痛苦的就是修改代码,每次找到疑似Bug,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导师发现了这样笨笨的调试Bug,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换,我这个中国教育的半牺牲品才算向美好生活迈进了一小步。网摘二1、条件断点断点大家都比较熟悉,在EclipseJava编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。在断点处点击鼠标右键,选择最后一个BreakpointProperties断点的属性界面及各个选项的意思如下图,2、变量断点断点不仅能打在语句上,变量也可以接受断点,上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。3、方法断点方法断点就是将断点打在方法的入口处,方法断点的特别之处在于它可以打在JDK的源码里,由于JDK在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。4、改变变量值代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?在Debug视图的Variables小窗口中,我们可以看到mDestJarName变量的值为F:StudyeclipseproJarDirjarHelp.jar我们可以在变量上右键,选择ChangeValue.在弹出的对话框中修改变量的值,或是在下面的值查看窗口中修改,保用Ctr+S保存后,变量值就会变成修改后的新值了。5、重新调试这种调试的回退不是万能的,只能在当前线程的栈帧中回退,也就说最多只能退回到当前线程的调用的开始处。回退时,请在需要回退的线程方法上点右键,选择DroptoFrame6、远程调试用于调试不在本机上的程序,有两种方式,1、本机作为客户端2、本机作为服务端使用远程调试的前提是服务器端和客户端的代码是一致的。本机作为客户端本机作客户端比较常用,需要在远端的服务器上的java程序在启动时打开远程调试开关,服务器端需要加上虚拟机参数1.5以前版本(1.5以后也可用):【-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000】1.5及以上版本:【-agentlib:jdwp=transport=dt_socket,server=y,address=8000】F:Studyeclipseproscreensnapjava -Xdebug -Xrunjdwp:transport=dt_socket,server=y,addre

温馨提示

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

评论

0/150

提交评论