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


id="iframeu2606276_0" src="http://pos.baidu.com/ackm?rdid=2606276&dc=2&di=u2606276&dri=0&dis=0&dai=2&ps=264x95&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1464245038793&ti=Eclipse%20%E8%B0%83%E8%AF%95%E5%99%A8%EF%BC%9A%E9%9B%B6%E8%B7%9D%E7%A6%BB%E6%8E%A5%E8%A7%A6%E5%AE%9E%E6%88%98%E6%8A%80%E5%B7%A7%20%2F%20%E8%93%9D%E8%AE%AF&ari=1&dbv=2&drs=1&pcs=880x518&pss=880x264&cfv=0&cpl=4&chi=1&cce=true&cec=UTF-8&tlm=1464245038&ltu=http%3A%2F%2Fwww.lxway.com%2F894990954.htm&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DJY0Ax7b7WFTQ-lVtjSLMM-S2PRXc09_aGGUGjH_9uwQkGFx5Q8mq_o3Ba5qNTBeS%26wd%3D%26eqid%3De807da620008b6bf0000000557469b0b&ecd=1&psr=1366x768&par=1366x728&pis=-1x-1&ccd=24&cja=false&cmi=6&col=zh-CN&cdo=-1&tcn=1464245039&qn=1ec59c9a2580088d&tt=1464245038771.172.724.727" width="728" height="90" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="box-sizing: border-box; border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;">

Eclipse调试技巧。

http://hb.qq.com/a/20111125/000136.htm

调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码。Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断。该调试器提供所有标准调试功能,包括进行单步执行、设置断点和值、检查变量和值以及暂挂和恢复线程的能力。这篇文章主要讲述Eclipse调试器,包括Debug视图,断点的设置,Java代码的调试等等。与一些理论性较强的文章相比,本文更注重实践,为读者提供更加使用的调试技巧。

Eclipse 调试器

  Eclipse 平台的最大特色是插件化(Plugin)。调试是任何程序员都无法回避的工作。因此Eclipse的内置插件Java开发工具包(Java Development Toolkit,简称JDT)中集成了一个功能强大的Java调试器(Debugger)。实际上,JDT是Eclipse工作平台(Eclipse Platform Workbench)的基础工具,除了调试器,还提供透视图、视图、编辑器、搜索等Eclipse基础功能。

  由于Eclipse调试器采用了基于客户端/服务器的设计模式,远程应用的调试变得与本地一样简单。其工作原理是,本地Eclipse工作平台充当调试的客户端,而远程应用所在的机器则充当了调试服务器的角色。

Debug 视图

  Debug视图作为Eclipse调试器透视图的一部分,管理与程序调试相关的功能。如图所示,Debug视图呈树状结构,每一个线程对应一树节点。图中显示的是暂挂线程Main的调试堆栈帧结构。

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

  作为标准的Java调试平台,Debug视图提供了许多执行控制命令(Execution Control Commands),用于在程序中设置/取消断点,单步执行,暂挂与恢复线程。以下是一些常用的执行控制命令:

1. Layout布局

  Debug视图的布局与断点调试等主体功能相比,显得并不那么乍眼,因此也常被人忽略,不过Eclipse的魅力之一就是它的细节做的特别完美。我们简单介绍一下Debug视图布局的特点,如图所示。

  第一个特点是Automatic功能。选择菜单选项Layout -> Automatic,可以实现Debug视图在树状模式与Breadrumb模式之间的自动互换。相信很多编程人员都喜欢Breadrumb模式,向面包片一样,一层一层的,直观,醒目。

  Layout菜单的第二个特点Breadrumb模式。选择菜单选项Layout -> Breadcrumb,打开Breadrumb模式。除此之外,选择菜单选项Layout -> Auto-Expand Breadcrumb,可实现自动展开Breadrumb模式。当选择下拉框时,可自动定位到暂挂线程的调试堆栈帧。这个细节对于编程人员来说,也是非常的方便。

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

2. 调试启动停止等相关命令

  Debug视图提供了诸多的启停控制命令,叫法上与其它的调试器可能稍微有些不同,具体如下:

  启动调试视图:Eclipse提供三种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)以及快捷键(F11),在这一点上,与其他命令(例如Run)类似。

  停止调试:Eclipse通过Terminate命令终止对本地程序的调试。特别的,对于远程程序的调试,Eclipse使用Disconnect命令来终止与远程JVM的socket连接。前面我们谈到,Eclipse调试器采用了基于客户端/服务器的设计模式,本地Eclipse工作平台充当调试的客户端,而远程应用所在的JVM则充当了调试服务器的角色。简单的说,Terminate命令终止本地调试,Disconnect命令终止远程调试。Terminate/Disconnect All终止所有的调试,包括本地与远程。

  重新启动调试:Eclipse通过Relaunch命令重新启动调试。这里需要指出的是Relaunch支持两种重启动模式,一种是针对已经停止的程序调试,另一种是针对Active的当程序调试。前者不难理解,效果上等同于Terminate+Launch。后者的处理方式有些不同,效果上则等同于Launch一个新的Debug项。实际上,针对后一种情况,我们通常采用Eclipse的Terminate and Relaunch命令来达到重启Debug的目的。

  删除调试项:Eclipse支持针对多个程序的调试。我们称每一项对应一个Debug Item。Remove命令将某一个Debug Item从当前的Debug视图中删除。不过,Remove命令只适用于已停止的Debug Item,而对于运行中的Debug Item,Eclipse提供了Terminate and Remove命令。假如想停止并清除所有的Debug Item,则可以通过Terminate and Remove All命令。此外,Eclipse还提供了Copy Stack命令或者快捷键Ctr+C,可将调试堆栈帧内容拷贝至剪贴板中,这样效果上就等同于“撤销”。

  以上这些命令虽然有些琐碎,但是非常能反映Eclipse对细节的把握与控制。

3. 单步执行

  相信任何调试人员对单步调试非常的熟悉。Eclipse提供step into、step over、 step return三个命令来支持单步调试。三者的具体区别是:step into(快捷键F5)就是单步执行,遇到子函数就进入并且继续单步执行;step over(快捷键F6)是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。step return(快捷键F7)就是单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回到上一层函数。说的通俗点就是,step into:进入子函数,step over:越过子函数,但子函数会执行,step return:跳出子函数。

  此外,Eclipse还提供了Run to line(快捷键Ctr + R)功能,从开始处运行程序,到正在执行的断点暂停。

4. Drop to Frame

  Drop to Frame功能虽然不属于单步调试的核心,但是该功能非常的适用,它为调试人员提供了调试回退的机会。Drop to Frame可以重新跳到当前方法的开始处重新执行,并且所有上下文变量的值也相应回到初始时刻,如图所示。

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

5. Step Filters

  当在你调试的时候,你只希望查看自己的代码,而不是从JDK或者是其他库中的代码,甚至是你也想屏蔽自己代码库中的框架部分代码。

  针对这样的需求,Eclipse提供了逐步过滤器(Step Filters)选项指的是一直执行直到遇到未经过滤的位置或断点。Step Filters功能由Use Step Filters,Edit Step Filters,Filter Type,Filter Package四项组成。

  具体操作如下:

  步骤 1: Windows -> Preferences -> Java -> Debug -> Step Filtering.

  步骤 2:选择‘Use Step Filters’.

  步骤 3:在屏幕上选中所需的选项。你可以添加你自己代码库中的部分代码。

  步骤 4:点击‘Apply’.

  原理上,Edit Step Filter命令用于配置Step Filter规则,而Filter Type与Filter Package分别指的是过滤的Java类型与Java Package,如图所示。

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

6. 声明选项

  Open Declared Type命令会打开当前调试堆栈帧的类型声明编辑器。而Open Declared Type Hierarchy则展现的是完整的层次结构,如图所示。

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

7. 线程的暂挂/恢复

  Eclipse通过Suspend与Resume来支持线程的暂挂与恢复。一般来讲,Suspend适用于多线程程序的调试,当需要查看某一个线程的堆栈帧及变量值时,我们可以通过Suspend命令将该线程暂挂。Resume用于恢复。有两种Resume需要注意:第一是当在调试过程中修改程序代码,然后保存,点击Resume,此时程序会暂挂于断点。第二是当程序抛出异常时,运行Resume,程序也会暂挂于断点。

8. Show Monitor命令

  Show Monitor命令可实时显示变量的值。举个例子,我们写一个简单的HelloWorld程序。

  /**

  * Hello World

  */

  public class HelloWorld {

  public static void main(String[] args) {

  Line 11: Object mutex = new Object();

  synchronized (mutex) {

  System.out.println(Hello World!);

  如图所示,Show Monitor对应的监视信息会以“钥匙”的形式出现在当前stack frame前面。当前信号量的id为16。

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/26/84/913/59389271.jpg" border="1" style="border:0px;" />

【IT168 专稿】

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

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/27/84/913/59389272.jpg" border="1" style="border:0px;" />

调试选项配置

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

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

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/28/84/913/59389273.jpg" border="1" style="border:0px;" />

  根据目标程序的类型,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函数。

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/29/84/913/59389274.jpg" border="1" style="border:0px;" />

  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。

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/30/84/913/59389275.jpg" border="1" style="border:0px;" />

  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支持占位符*与?。占位符*表示任何字符串,?表示任意一个字符。可以根据需要决定在出现异常的时候是否暂挂当前线程。

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/31/84/913/59389276.jpg" border="1" style="border:0px;" />

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

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

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

断点属性

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

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/32/84/913/59389277.jpg" border="1" style="border:0px;" />

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

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/33/84/913/59389278.jpg" border="1" style="border:0px;" />

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

变量属性

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

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

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/34/84/913/59389279.jpg" border="1" style="border:0px;" />

表达式属性

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

650) this.width=650;" alt="Eclipse 调试器:零距离接触实战技巧" src="http://img1.gtimg.com/hb/pics/hv1/35/84/913/59389280.jpg" border="1" style="border:0px;" />

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

 eclipse, step into, step over, step return

Eclipse 调试器:零距离接触实战技巧相关推荐

  1. Eclipse 调试器(引用IT168)

    Eclipse 调试器:零距离接触实战技巧 2011年11月25日01:29IT168 字号:T|T 调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码.Eclipse调试器的目标是让程序员能 ...

  2. Eclipse 调试器

    http://www.ibm.com/developerworks/cn/opensource/os-eclipse-javadebug/ http://oreilly.com/java/archiv ...

  3. 10个利用Eclipse调试Java的常见技巧

    http://www.open-open.com/news/view/1ad9099 阅读目录 1. Conditional Breakpoint 2. Exception Breakpoint 3. ...

  4. 10 个利用Eclipse调试Java的常见技巧

    1. Conditional Breakpoint Hope we know how to add a breakpoint. If not, just click on the left pane ...

  5. inconsistent debug frame and source code -Eclipse调试器里看到的代码行数和实际源代码不一致该怎么办

    Created by Wang, Jerry, last modified on Jul 20, 2016 比如这个:上面我看到当前是在listenerStart()这个方法的line 4932,但是 ...

  6. apache camel_带有调试器的Apache Camel Eclipse工具

    apache camel 大约2个月前, Lars Heineman在 JBoss工具堆栈中写了关于改进的Apache Camel Eclipse工具的博客. 在即将发布的版本中,他们将Camel调试 ...

  7. 带有调试器的Apache Camel Eclipse工具

    大约2个月前, Lars Heineman在 JBoss工具堆栈中的博客中介绍了改进的Apache Camel Eclipse工具. 在即将发布的版本中,他们将Camel调试器与本机Eclipse调试 ...

  8. Eclipse 的 Debug 介绍与技巧

     没有任何程序员能够一气呵成的写出没有任何 Bug 的代码,所以很多程序员有相当一部分时间是花费在 Debug 上的,程序调试是每个程序员必须面对的工作.如何使用 Eclipse 进行有效的.尤其 ...

  9. Eclipse的Debug介绍与技巧

    写在前面:由于最近手上项目新接入了两个中间件,在接入过程中遇到了很多问题,大部分问题都是由身边同事以及中间件的开发者帮忙解决的,在他们解决的过程中学习到了很多关于debug的技巧.同时结合网上的一些介 ...

最新文章

  1. 用户、组的管理常用到的命令介绍
  2. 关于Cocos2d-x中精灵节点的透明度的设置
  3. ML 05、分类、标注与回归
  4. python发送邮件拒绝_人生苦短之Python发邮件
  5. Spring学习(九)Spring 和数据库编程【了解】
  6. spring-note-01
  7. web开发集成数字证书_每个数字设计师都应该知道的Web开发的七个原则
  8. 【Keras】Win10系统 + Anaconda+TensorFlow+Keras 环境搭建教程
  9. 一文彻底搞懂App的Monkey稳定性测试
  10. 如何从SQL Server中的SELECT更新?
  11. oracle update导入clob,【Oracle】给clob字段插入数据
  12. 开发新概念:代码管理(代码框架)
  13. Slurm如何管理和使用节点资源
  14. python oct_安装在python oct2py中使用的gnuoctave
  15. 分享一种免费的.FLV格式视频转.MP4的方法,方便高效且不用迅捷转换器。。。
  16. 2014年12月CCF软考试题
  17. 优秀孩子的父母都有这五个特点
  18. delphi php post,delphi idhttp post 网页,该如何解决
  19. java中标签内容居中显示_图形标签中图像上的figcaption标签的居中和对齐宽度
  20. TextMesh pro插件的使用问题

热门文章

  1. 无缝衔接的人会遭报应吗_因果报应:一个人将走背运时,往往会出现这三个征兆,别不信!...
  2. P1793 求解迷宫问题 OJ
  3. c语言打印字符串%s,C语言%s格式符的使用!
  4. a76比a73强多少_ARM的Cortex-A76性能提升35%又怎样?还要被去年的苹果A11虐
  5. nginx配置ssl和minio
  6. 树莓派简单配置samba,共享文件
  7. 自定义View之 获取属性
  8. 西南大学2019年6月c语言答案,西南大学 2019年6月 《机械工程仿真软件应用》【1273】 答案...
  9. axel多线程下载ftp文件(需登录)Ubuntu
  10. Linux网络实战- FTP服务器搭建