您的位置:首页 > 编程语言 > Java开发

Eclipse 10个最有用的java调试技巧

2015-04-09 20:02 274 查看
开发程序少不了出错、调试,Eclipse应该是最常用的java ide了,那么Eclipse有哪些技巧可以提高我们调试的效率呢?本文翻译自《Top 10 Java Debugging Tips with Eclipse》。相信我,这里的调试技巧会让你有更多的时间做其他事(约会^-^)。

这篇博客会加入一些个人的理解,可以点击这里查看原文。限于本人英文水平,翻译可能不太准确,请大家见谅。

在这个教程中,我们会看到使用Eclipse调试Java应用程序的技巧。调试器帮助我们发现并修改程序的错误。这里我们会集中精力在运行时错误上,而不会提及编译时错误。在这个教程中,我们将专注于我们最喜欢的IDE:Eclipse的GUI调试器,而不会提及命令行调试器。虽然我们说的是Eclipse,但调试的技巧是通用的,这些技巧适用于大多数的IDEs,像NetBeans等等。

在开始看这篇教程之前,推荐你看看这篇Eclipse快捷键(英文),这对你会很有帮助.我的Eclipse的版本是Luna(原文的是Juno).

不要使用System.out.println作为调试的工具.

对所有涉及到的组件启用详细的日志级别.

使用日志分析器读取日志.

1.条件断点

大家应该都知道如何添加一个断点:在行号及其左边双击。在debug perspective(debug透视图)中,Breakpoints视图将列出所有的断点.我们可以为断点添加一个条件表达式.也就是说,这个断点只有在这个表达式为ture时才会激活并暂停程序执行,否则断点会暂时失效.

我们看一个例子:

int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

for( int i=0; i<a.length; ++i ){
System.out.println( "21%a[" + i + "] = " + (21%a[i]) );
}


运行这段程序会发现,总是在输出
21%a[8] = 3
之后出现错误,如果直接在第4行添加一个断点,那么我们需要狂按鼠标9次才能发现,原来是因为a[9]=0.如果我们设置为
i==9
,那么断点只有在
i
为9时才会起作用,也就是暂停程序.会省很多麻烦:

下图为设置满足条件时中断(这里为
i==9
).注意Breakpoint左边的星号,这表示没有保存,也就是做的改动不会生效,可以Ctrl+S保存,或者等它自动保存



或者可以这样:设置经过该断点第10次时生效,之后会将该断点设为无效



掌握这些技巧后,再也不会遇到狂点一阵鼠标之后不小心点过了,只能重新开始调试的尴尬了^-^.

2.异常断点

在Breakpoints视图中有一个按钮很像
J!
,我们可以使用这个按钮添加基于java异常的断点.例如,我们希望这个程序在遇到NullPointerException

时暂停并且接受调试,那么我们可以使用这个按钮添加一个断点:



注:Luna版本的Eclipse貌似已经支持自动在运行时异常处中断了.上面那个例子,即使不加任何断点也会在遇到
i==9
时暂停执行.不过检查异常还需要手动添加断点.

3.观察点

这是一个我非常喜欢的特性.当选定的变量被访问或者修改时暂停程序执行,并接受调试.添加观察点的方法是选择大纲视图,在添加观察点的成员变量上单击右键,选择
Toggle Watchpoint
(切换观察点).这会为这个属性创建一个观察点,并且这个观察点会被列在断点视图中.这在你觉得属性被无缘无故的修改,又找不到在哪修改时尤其有用.



目前只有类的属性可以添加观察点,普通方法中的变量还不能添加观察点.其实也没有必要.

4.计算并显示

调试时在一个选择的变量或者表达式上按Ctrl+Shift+D或者Ctrl+Shift+I会显示该变量或者表达式的值.我们还可以在一个表达式/变量上添加一个永久的监视,这会将变量/表达式显示到表达式视图中:在变量上单击右键–>查看.

注: 对于变量,直接将鼠标放上去,停留一会就会出现变量的值.



5.改变变量的值

调试时我们可以改变变量的值.在变量视图中选择某个变量的值,输入新的值,回车,完成修改!可以把一个不符合我们预期的变量改为我们预期的值,继续运行.



6.在main方法处暂停

在Run/Debug设置中,我们可以选择”Stop in main”复选框,如果我们启用了这个特性,那么在调试时,程序会在main方法的第一行处暂停.然后可以在需要暂停的行单击右键,选择”Run to Line”(Ctrl+R 运行到该行),相当于创建了一个临时断点,省去了删除断点的麻烦.





7.环境变量

我们可以方便地通过编辑配置对话框添加环境变量,而不是通过我的电脑->属性…这有一个好处,不会影响电脑整体的环境变量,只有你配置的java应用程序受影响.所以,如果有什么环境变量是只有这一个程序需要的,那么在这里修改吧,不会把你的系统变量改得乱七八糟.



8.Drop to Frame

这个第二个我非常喜欢的特性.Drop to frame就是说,可以重新跳到调用堆栈中的方法的开始处重新执行(注:除了第一个方法,也就是main方法),并且所有上下文变量的值也回到那个时候。可以快速恢复到某一状态,而不需要重新开始调试。当然,原来执行过程中产生的副作用是不可逆的,比如你往数据库中插入了一条记录。

选中需要返回到的方法名,单击调试工具栏上的
Drop to Frame
按钮,或者直接单击右键–>
Drop to Frame




9.Step过滤

当我们使用
单步进入(F5)
功能时,我们可能会不小心进入到一个我们并不想进入的库中,比如java类库中.我们可以在Preferences中添加过滤器,排除指定的包.这样以后我们使用
单步进入
时就不会进入这些包中的类了.



10.进入,跳过和返回

这些技巧是debug最基本也是最重要的知识

F5-单步进入,移动到下一步,如果当前行是一个方法调用,则进入这个方法的第一行

F6-单步跳过,移动到下一步,如果当前行有方法调用,这些方法将直接执行完毕,并返回,然后到下一步

F7-跳出函数,继续执行,直到当前方法执行完毕或者遇到断点时停止

F8-执行到下一个断点处.



翻译于2015/04/09
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: