假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间。由于这个原因,用这些时间来重视并了解所有使我们调试更方便的功能。那能为你省下一些时间,也将会使你的生活更安逸、轻松。
第 1条:不要调试太多
一个关于调试的疯狂声明作为开头。但它必须是要说的!尝试切分一下你那复杂的逻辑成多个独立的单元,并编写单元测试来检测你代码的正确性。我想像如下这样的流程应该是发生得非常频繁的----一些人通过大型web应用程序点击、填写多个表单、切换到不同的页面、正在 后的页面上检测工个计算逻辑和实现这个调试视图中的大部分逻辑。在启动你的tomcat之前总是问你自己:有没有方法使用一个单元测试来检测这些行为?你在过去这些时间可以不知道或已忘记这些,但从现在开始,我们将要关注一些eclipse的调试技巧,你会发现有大量的关于良好代码设计的好东西。
- 断点视图 : 条件断点
如果你只对应用中的某部分感兴趣的话,这个功能非常有用。例如,如果你要在第 13次循环的时候检查程序,或者在一个抽象父类中调试某些功能,而你只关注其中一个具体的实现。你可以在断点视图中设置条件,或者通过代码旁边的蓝色断点标记的右键菜单("breakpoint properties")设置。你可以在条件代码片段为true的时候暂停程序,或者当代码片段的值改变的时候挂起程序。
- 变量视图:展示逻辑结构
如果你需要在变量视图查看一个map对象或者list对象的值,对于eclipse的默认设置,一般并不是那么容易。假设,你使用的是hashmap,你需要点击遍历各个实体条目,并面临各种hashmap的实现细节。但是,在变量视图上面有一个叫做“show logical structure”的按钮。它非常有用,尤其当你的对象的tostring()方法所展示的信息并不友好的时候。我的老大在几周前为我展示了这个功能。你知道,他经常跟powerpoint或者excel打交道。对于我这么一个开发人员,多丢脸哦
未开启“show logical structure”
开启“show logical structure”
- 变量视图:更改变量值...
当你需要稍微更改输入信息的时候,不需要重新开始调试会话,只需在一个表格中输入新的信息,你可以在调试阶段直接修改你的变量的值。有写时候,你可以节省一些时间,你可以通过这个功能,更加简单的模拟一些怪异的情况。
- display视图
你知道“display视图”吗?你可以在调试过程中,通过“window” -> “show view” -> “display”来它。现在,你的eclipse应该是一个空白的新视图。你可以使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可以使用所有变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者ctrl+u(执行)或者 ctrl+shift+i (检查).
- 导航: drop to frame
我想任何人都知道“step into”, “step over”,而且可能也知道“step return”. 这些是调试时的基本导航功能。我想提两个我非常喜欢的导航的方法。第 一个是“drop to frame”. 使用这个特性你可以及时回退
你可以直接回退到运行过的java堆栈帧中某一帧。当我调试时,一不小心错过了某个关注的代码行时,我常常用这个回退一帧。使用“drop to frame”这个特性我可以简单的重新运行某帧代码。
- 导航: step into selection
第二个是“step into selection”. 这也是很简单,但很多人使用的一个。要使用它,你只需要按 ctrl+alt 同时点击一个你想运行到的方法名。非常方便,非常。相比“step into”这个非常方便,想想你像跟踪进一个有很多参数的函数,如果用“step into”你必须进入,退出每个参数计算过程,才能进入到你真正想进的函数。“run to line”也是很棒的特性。只需要把光标放在你想运行到的哪一行前面,然后按“ctrl+r”就可以了。
- 导航器:使用键盘
如果避免使用鼠标的话,你的操作速度会更快。你至少应该如下的快捷键:
f5 – “单步进入”
f6 – “单步执行并跳过”
f7 – “单步执行并返回”
f8 – “继续执行”
ctrl+shift+b – “添加断点”
ctrl+shift+i – “检查”
- 断点视图:watchpoints
如果改变这个变量会有什么结果?! 有时候创建一个watchpoint对于调试会非常有用。调试器会停止,不管这个被观察的字段是被修改还是被读取 - 你可以自己来配置决定。你只需双击一个字段,然后你就可以在断点视图中看到watchpoint,并且可以编辑它的属性。你甚至可以一个访问次数,这意味着当变量被访问的次数达到这个数量的时候,调试器会停止。这对于普通的断点也适用。
- 友好的可读的对象
变量视图是使用对象的tostring方法来现实对应的值。因为这个原因,如果提供友好的tostring方法实现,对调试来说会非常有用。在javadoc中关于java.lang.object的默认tostring实现,也是这样的:
返回一个表示该对象的字符串。通常tostring方法返回这么一个字符串,“字面表示”该对象。返回结果必须是一个简洁却富含可表示该对象的信息,并且友好可读取。我们所有的子类都覆盖这个方法。
你可以参考commons-lang中的 tostringbuilder。它提供一些功能来编写 (引用自javadoc ) "良好并连贯” 的tostring方法。
默认的tostring
默认的tostringbuilder例子
tostringbuilder例子 – 多行文本风格
如果你不能修改tostring实现,例如你现在使用框架或者一个外部的api,你可以有另外一个选择,在eclipse中创建一个“detail formatter”。你需要在变量视图中右击一个对象,并点击“new detail formatter…”。然后你就可以输入一些代码,用于展现这个对象。
温馨提示
温馨提示
相关资讯