技术开发 频道

Eclipse 调试器:零距离接触实战技巧

    需要指出的是,不是所有的JVM都支持Show Monitor功能。如果是IBM或者是Oracle的JVM,则要求版本高于1.4,否则提示的是Alert信息:VM does not provide monitor information,如图所示。

深入浅出Eclipse 调试器

  调试选项配置

  在调试程序之前,需要预先完整地编译和运行代码,创建运行配置并确认其正常启动。举个例子,假设我们需要调试一个HelloWorld的Java Application程序。我们需要如下步骤:

  1. 选择菜单 Run --> Open Run Dialog ,打开Run对话框。在对话框左侧的类型列表中选中Java Application,右键 --> New ,新建一个Java Application运行配置HelloWorld,如下图所示。

深入浅出Eclipse 调试器 

  根据目标程序的类型,Eclipse提供了如下几种类型调试。Eclipse Application主要针对Eclipse插件本身的调试,Java Applet针对Java浏览器小程序的调试,Java Application针对Main函数为如何的Java应用程序,JUnit/JUnit Plug-in Test针对的是基于JUnit框架的单元测试程序的调试,OSGi Framework针对的是基于OSGi框架的程序调试,所谓OSGi 框架指的是提供一个安全的可管理的Java Framework来部署可扩展的Java服务。而Remote Java Application针对的是远程应用程序的调试。

  2. 配置项目和启动类。在运行配置HelloWorld的Main Tab页,指定Project为导入的Test项目,启动类为HelloWorld,如下图所示。其中Main class提供了一个选项,即过滤系统库中的Main函数。 

深入浅出Eclipse 调试器

  3. 在运行配置HelloWorld的Arguments Tab页配置系统属性、类加载路径和工作目录。Argument分两部分,即Program arguments与VM argument。Program arguments指的是程序所需的参数,由main函数的args[]参数传入至程序。VM Arguments是设置虚拟机的属性。假设我们对Test类设置的Program arguments为pro1 pro2 pro3,而VM arguments设置为-DsysProp1=sp1 -DsysProp2=sp2。那么当点击Run按钮运行Java Application,完整的命令应该为java -DsysProp1=sp1 -DsysProp2=sp2 Test pro1 pro2 pro3。这里我们不需要指定任何参数。保留空白。

  4. 选择JRE Tab。Eclipse提供了三种Java运行时选项。分别为Project JRE,Execution enviroment, Alertnate JRE。我们选的是第三种,版本为JDK1.6。

深入浅出Eclipse 调试器

  5. Classpath Tab配置类加载路径。类路径可以连接 Java 运行库和文件系统。它定义编译器和解释器应该在何处查找要加载的 .class 文件。它的基本思想是:文件系统的层次结构反映了 Java 包的层次结构,而类路径则定义了文件系统中的哪个目录可以作为 Java 包层次结构的根。这里我们采取默认方式。

  6. 在Source Tab配置源文件查看路径。通过右边的Add按钮可以从许多地方(包括文件系统、既存项目等)添加源文件查看路径项。如果我们在调试需要深入到JDK中,可以通过该Tab添加源代码。这里配置我们采取默认方式。

  7. Environment Tab设置环境变量。我们采取默认方式。

  8. Common Tab设置常见的选项,如编码等。

  调试Java

  毫无疑问,最常见的调试过程就是设置断点,以允许检查在条件语句和循环中的变量和值。要在 Java 透视图的 Package Explorer 视图中设置断点,双击所选的源代码文件,在编辑器中打开它。遍历全部代码,将光标放置在含有可疑代码的那一行的标记栏上(在编辑器区域的左侧)。双击以设置断点。

  断点类型

  Breakpoints视图列出当前工作区别设置的所有断点,如图所示。按照功能分又可分为:

  Java Class Load Breakpoints:当load指定的class时发生。这个在调试class load非常有用。

  Java Exception Breakpoints:当发生异常时发生暂挂。如图,Choose an exception支持占位符*与?。占位符*表示任何字符串,?表示任意一个字符。可以根据需要决定在出现异常的时候是否暂挂当前线程。

 

深入浅出Eclipse 调试器

  Java Line Breakpoints:Java行断点。这是最普通的断点形式。即双击程序中某一行最左边区域,添加一个行断点。

  Java Method Breakpoints:Java方法断点。方法断点就是将断点打在方法的入口处,如下图。方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK 在编译时去掉了调试信息,所以普通断点是不能打到里面的,但是方法断点却可以,可以通过这种方法查看方法的调用栈。

 

深入浅出Eclipse 调试器

  Java Watch Breakpoints:Java变量监视断点,实时地监视变量的变化

  断点属性

  Hit count:选择breakpoint view->右键hit count。设置执行次数,适合调试程序中的for循环。当循环中达到指定次数,则暂挂该线程或者虚拟机本身。  

深入浅出Eclipse 调试器

  条件断点:断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"。条件断点的条件一般来说有两种类型,一种是boolean变量为真,另一种是当侦测到变量值改变。

深入浅出Eclipse 调试器

 

  断点的导入与导出:这这对于调试大型工程非常有帮助。既可以导入导出所有的断点,也可以加以选择。导出文件的后缀为.bkpt。

  变量属性

  查看变量:Variables 视图(在 Display 窗口中)显示了选中的堆栈帧中的变量值。要查看所请求的变量,只需展开 Variables 视图中的树直到所请求的元素为止。

  改变变量值:Variables 视图不仅能查看变量,而且能够改变变量的值。如果您也碰到下面的问题,建议使用改变量值。即当代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确? 

深入浅出Eclipse 调试器

  表达式属性

  要在 Debug 透视图的编辑器中求表达式的值,选中设置有断点的一整行,并在上下文菜单中选择 Inspect 选项。表达式是在当前堆栈帧的上下文中求值的,其结果显示在 Display 窗口的 Expressions 视图中。

深入浅出Eclipse 调试器

  Eclipse 提供了内置的 Java 调试器,具有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值、暂挂和恢复线程的能力。Eclipse同时也是一个可支持许多其它语言的可扩展平台,而其中最重要的就是支持 C/C++。Eclispe官方网站:http://www.eclipse.org

4
相关文章