使用 Eclipse 调试 Java 程序的 10 个技巧

英文原文:Again! – 10 Tips on Java Debugging with Eclipse html

参与翻译(3人)enixyuzhouaoljb_iss
java

你应该看过一些如《关于调试的N件事》这类很流行的帖子 。假设我天天花费1小时在调试个人应用程序上的话,那累积起来的话也是很大量的时间。因为这个缘由,用这些时间来重视并了解全部使咱们调试更方便的功能。那能为你省下一些时间,也将会使你的生活更安逸、轻松。同时也代表其它关于此主题的帖子也是颇有价值的。 web

第1条:不要调试太多 apache

一个关于调试的疯狂声明做为开头。但它必须是要说的!尝试切分一下你那复杂的逻辑成多个独立的单元,并编写单元测试来检测你代码的正确性。我想像以下这样的流程应该是发生得很是频繁的----一些人经过大型web应用程序点击、填写多个表单、切换到不一样的页面、正在最后的页面上检测工个计算逻辑和实现这个调试视图中的大部分逻辑。在启动你的tomcat以前老是问你本身:有没有方法使用一个单元测试来检测这些行为?你在过去这些时间能够不知道或已忘记这些,但从如今开始,咱们将要关注一些eclipse的调试技巧,你会发现有大量的关于良好代码设计的好东西api

- 断点视图 : 条件断点 tomcat

若是你只对应用中的某部分感兴趣的话,这个功能很是有用。例如,若是你要在第13次循环的时候检查程序,或者在一个抽象父类中调试某些功能,而你只关注其中一个具体的实现。你能够在断点视图中设置条件,或者经过代码旁边的蓝色断点标记的右键菜单("Breakpoint Properties")设置。你能够在条件代码片断为true的时候暂停程序,或者当代码片断的值改变的时候挂起程序。 框架

Conditional Breakpoints
Conditional Breakpoints II

- 变量视图:展现逻辑结构 eclipse

若是你须要在变量视图查看一个Map对象或者List对象的值,对于eclipse的默认设置,通常并非那么容易。假设,你使用的是HashMap,你须要点击遍历各个实体条目,并面临各类HashMap的实现细节。可是,在变量视图上面有一个叫作“Show Logical Structure”的按钮。它很是有用,尤为当你的对象的toString()方法所展现的信息并不友好的时候。个人老大在几周前为我展现了这个功能。你知道,他常常跟PowerPoint或者Excel打交道。对于我这么一个开发人员,多丢脸哦 ;-) 函数

未开启“Show Logical Structure” 
Logical Structure I 
开启“Show Logical Structure” 
Logical Structure II  单元测试

- 变量视图:更改变量值...

当你须要稍微更改输入信息的时候,不须要从新开始调试会话,只需在一个表格中输入新的信息,你能够在调试阶段直接修改你的变量的值。有写时候,你能够节省一些时间,你能够经过这个功能,更加简单的模拟一些怪异的状况。

Change Value

- Display视图

你知道“Display视图”吗?你能够在调试过程当中,经过“Window” -> “Show View” -> “Display”来激活它。如今,你的eclipse应该是一个空白的新视图。你可使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可使用全部变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或者 CTRL+SHIFT+I (检查).

Display View

- 导航: Drop to Frame

我想任何人都知道“Step Into”, “Step over”,并且可能也知道“Step return”. 这些是调试时的基本导航功能。我想提两个我很是喜欢的导航的高级方法。第一个是“Drop to Frame”. 使用这个特性你能够及时回退 ;-)  你能够直接回退到运行过的java堆栈帧中某一帧。当我调试时,一不当心错过了某个关注的代码行时,我经常用这个回退一帧。使用“Drop to Frame”这个特性我能够简单的从新运行某帧代码。 
Drop to Frame
 

- 导航: Step into Selection

第二个是“Step into Selection”. 这也是很简单,但不少人使用的一个。要使用它,你只须要按 Ctrl+Alt 同时点击一个你想运行到的方法名。很是方便,很是快速。相比“Step Into”这个很是方便,想一想你像跟踪进一个有不少参数的函数,若是用“Step Into”你必须进入,退出每一个参数计算过程,才能进入到你真正想进的函数。“Run to line”也是很棒的特性。只须要把光标放在你想运行到的哪一行前面,而后按“CTRL+R”就能够了。
 
Step Into Selection

- 导航器:使用键盘

若是避免使用鼠标的话,你的操做速度会更快。你至少应该以下的快捷键:

  • F5 – “单步进入”
  • F6 – “单步执行并跳过”
  • F7 – “单步执行并返回”
  • F8 – “继续执行”
  • Ctrl+Shift+B – “添加断点”
  • Ctrl+Shift+I – “检查”

- 断点视图:Watchpoints

若是改变这个变量会有什么结果?! 有时候建立一个watchpoint对于调试会很是有用。调试器会中止,无论这个被观察的字段是被修改仍是被读取 - 你能够本身来配置决定。你只需双击一个字段,而后你就能够在断点视图中看到watchpoint,而且能够编辑它的属性。你甚至能够一个访问次数,这意味着当变量被访问的次数达到这个数量的时候,调试器会中止。这对于普通的断点也适用。

Watch Point

- 友好的可读的对象

变量视图是使用对象的toString方法来现实对应的值。由于这个缘由,若是提供友好的toString方法实现,对调试来讲会很是有用。在javadoc中关于java.lang.Object的默认toString实现,也是这样推荐的:

返回一个表示该对象的字符串。一般<code>toString</code>方法返回这么一个字符串,“字面表示”该对象。返回结果必须是一个简洁却富含可表示该对象的信息,而且友好可读取。咱们推荐全部的子类都覆盖这个方法。

你能够参考commons-lang中的 ToStringBuilder。它提供一些功能来编写 (引用自javadoc ) "良好并连贯” 的toString方法。

默认的ToString

Default-ToString 
默认的ToStringBuilder例子
ReflectionToStringBuilder 
ToStringBuilder例子 – 多行文本风格
ReflectionToStringBuilderMultiLine 

若是你不能修改toString实现,例如你如今使用框架或者一个外部的API,你能够有另一个选择,在Eclipse中建立一个“Detail Formatter”。你须要在变量视图中右击一个对象,并点击“New Detail Formatter…”。而后你就能够输入一些代码,用于展示这个对象。

相关文章
相关标签/搜索