当前位置: 代码迷 >> 综合 >> Top 10 Java Debugging Tips with Eclipse(Eclipse调试Java的10个技巧)
  详细解决方案

Top 10 Java Debugging Tips with Eclipse(Eclipse调试Java的10个技巧)

热度:79   发布时间:2023-12-12 23:37:41.0

原文:http://blog.csdn.net/cselmu9/article/details/7994260

注:[ ]中的为个人注释。

在本教程中,我们将看到如何使用Eclipse调试Java应用程序。调试可以帮助我们识别和解决应用程序中的缺陷。我们将重点放在运行时的问题,而不是编译时错误。像gdb是基于命令行的调试器,在本教程中,我们将关注基于GUI的调试器,运行我们最喜爱的IDE——Eclipse。虽然我们讲解的是Eclipse调试器,但是调试技巧大多是通用的,适用于其他IDE,例如NetBeans。

在看这篇文章前,我推荐你看一下Eclipse 快捷键手册,你也可以到这儿:下载PDF文件我的eclipse版本是4.2 Juno。

0.三点特别提醒:

  • 不要使用System.out.println作为调试工具
  • 启用所有组件的详细的日志记录级别
  • 使用一个日志分析器来阅读日志

[(System.out.println()对开发人员来说,有时候也许可以是一种调试手段,但是项目一旦完成他就没有什么用途了,就变成垃圾了,得必须注释或删除掉,这样会比较麻烦。启用所有组件的详细日志记录级别,运用日志分析器来记录详细系统运行状态,这对后期网站的优化和维护会有很多作用。)这仅仅是个人理解,仅供参考!]

1.条件断点

想象一下我们平时如何添加断点,通常的做法是双击行号的左边。在debug视图中,BreakPoint View将所有断点都列出来,但是我们可以添加一个boolean类型的条件来决定断点是否被跳过。如果条件为真,在断点处程序将停止,否则断点被跳过,程序继续执行。[注意,Breakpoints可能因为窗口太小,而不能显示完全,这时需要放大该窗口。我们也可以选中断点,点击其右键菜单的属性选项,在相应的对话框里设置条件断点。]

[在下图中,只有当条件断点中的条件成立时,程序执行才暂停;否则程序跳过断点那一行继续执行。]


2.异常断点

在断点view中有一个看起来像J!的按钮,我们可以使用它添加一个基于异常的断点,例如我们希望当NullPointerException抛出的时候程序暂停,我们可以这样:

[在下图中,程序在抛出NPE的那一行暂停。]


3.观察点

这是一个很好的功能他允许当一个选定的属性被访问或者被更改的时候程序执行暂停,并进行debug。最简单的办法是在类中声明成员变量的语句行号左边双击,就可以加入一个观察点。

[在下图中,当一个类的成员变量被访问或者被修改时,程序执行暂停。]


4.查看变量

在选中的变量上使用Ctrl+Shift+d 或者 Ctrl+Shift+i可以查看变量值,另外我们还可以在Expressions View中添加监视。

[在下图中,我们可以通过利用"object.property"的方式来查看一个类的成员变量的值。]


5.更改变量的值

我们可以在Debug的时候改变其中变量的值。在Variables View中可以按下图所示操作。

6.在主方法停止

选中java类,打开右键菜单的"Run/Debug设置"选项,我们可以按如下图所示的启用这个特性。程序将会在main方法的第一行停住

7.环境变量

选中java类,打开右键菜单的"Run/Debug设置"选项,我们可以很方便的在Edit Conriguration对话框中添加环境变量。

8.跳出函数到选定层

这个功能非常酷,是我第二个非常喜欢的功能,Drop to frame就是说,可以重新跳到当前方法的开始处重新执行,并且所有上下文变量的值也回到那个时候。不一定是当前方法,可以点击当前调用栈中的任何一个frame跳到那里(除了最开始的那个frame)。主要用途是所有变量状态快速恢复到方法开始时候的样子重新执行一遍,即可以一遍又一遍地在那个你关注的上下文中进行多次调试(结合改变变量值等其它功能),而不用重来一遍调试到哪里了。当然,原来执行过程中产生的副作用是不可逆的(比如你往数据库中插入了一条记录)。

[在下图中,print()里的while循环执行了2次,这时我们可以点击"Drop to Frame"按钮,print()将回到刚开始执行的状态。]


[在下图中,print()里的成员变量又一次被设置成5。]


9.分步过滤

当我们在调试的时候摁F5将进入方法的内部,但这有个缺点有的时候可能会进入到一些内部(例如JDK),可能并不是我们想要的,我们可以在Preferences中添加一个过滤器,排除指定的包。

10.跳入,跳过和返回

其实这个技巧是debug最基本的知识。
  • F5-Step Into:移动到下一步,如果当前的行是一个方法调用,将进入这个方法的第一行。(可以通过第九条来排除)
  • F6-Step Over:移动到下一行。如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行。
  • F7-Step Return:继续执行当前方法,当当前方法执行完毕的时候,控制将转到当前方法被调用的行。
  • F8-移动到下一个断点处。


11.[设置项目的工作目录]

对于一个复杂的java项目,源代码和相应的资源文件很可能是通过link的方法添加的。默认的工作目录(Working Directory)和link的源代码不是同一个目录,这时我们可以设置java项目的工作目录到link过来的相应目录,来调试程序。


12.[程序方法的调用栈]

在下图中程序的方法调用顺序为main()->call1()->call2()->call3(),这个调用栈会显示在Debug窗口。


  相关解决方案