Eclipse调试Java的10个技巧
2016-07-16 14:48
459 查看
1、条件断点
想象一下我们平时如何添加断点,通常的做法是双击行号的左边。在debug视图中,BreakPoint View将所有断点都列出来,但是我们可以添加一个boolean类型的条件来决定断点是否被跳过。如果条件为真,在断点处程序将停止,否则断点被跳过, 程序继续执行。
断点属性中有三个选择,启用“Enable”,Hit Count和Conditional中依据我们的需要来选择。
1)Hit Count 是指定断点处的代码段运行多少次,最典型的就是循环,如果要让一个循环执行10次就线程挂起,则指定Hit Count值为10,那么当前的循环执行到第九次的时候就会挂掉。
2)Conditional,顾名思义,就是条件判断,例如我们需要循环变量i==8时,线程挂起,则条件设定为i==8,选择Suspend when "true"。
那如果上面的Hit Count和Conditional都选择的话,如果表达式和值设置不合理则会实效。如果选择Suspend when value changes,那么可能在Conditional在变量值发生改变的时候就挂起。
java代码:
控制台输出(当i等于8的时候就停在断点上了):
2、异常断点
在断点view中有一个看起来像J!的按钮,我们可以使用它添加一个基于异常的断点,例如我们希望当NullPointerException抛出的时候程序暂停,我们可以这样:
无需在java代码中加断点,debug运行程序遇到指定的NullPointerException自动停下来
3、观察点
这个特性我非常喜欢,他允许当一个选定的属性被访问或者被更改的时候程序执行暂停,并进行debug。最简单的办法是在类中声明成员变量的语句行号左边双击,就可以加入一个观察点。
java断点处:
4、查看变量
在选中的变量上使用Ctrl+Shift+d 或者 Ctrl+Shift+i可以查看变量值,另外我们还可以在Expressions View中添加监视。
java代码
5、改变变量值
我们可以在Debug的时候改变其中变量的值。在Variables View中可以按下图所示操作。
java代码
控制台输出(直接改变变量值为7,控制台就输出7了)
6、在Main方法中停止
在Run/Debug设置中,我们可以按如下图所示的启用这个特性。程序将会在main方法的第一行停住
java代码
7、环境变量
我们可以很方便的在Edit Conriguration对话框中添加环境变量
java代码,调用方式
8、Drop to frame
这个功能非常酷,是我第二个非常喜欢的功能,Drop to frame就是说,可以重新跳到当前方法的开始处重新执行,并且所有上下文变量的值也回到那个时候。不一定是当前方法,可以点击当前调用栈中的任何一个 frame跳到那里(除了最开始的那个frame)。主要用途是所有变量状态快速恢复到方法开始时候的样子重新执行一遍,即可以一遍又一遍地在那个你关注 的上下文中进行多次调试(结合改变变量值等其它功能),而不用重来一遍调试到哪里了。当然,原来执行过程中产生的副作用是不可逆的(比如你往数据库中插入 了一条记录)。
堆栈信息
java代码
通过使用Drop To Frame可以回到方法开始处,如下
9、Step 过滤
当我们在调试的时候摁F5将进入方法的内部,但这有个缺点有的时候可能会进入到一些库的内部(例如JDK),可能并不是我们想要的,我们可以在Preferences中添加一个过滤器,排除指定的包。
java代码,如下,当在如下位置按F5直接跳过,不在进入内部,charAt方法为java包下的方法,因此跳过
继续按F5如下图:
可以看到直接跳过了
10、进入、跳过、返回
其实这个技巧是debug最基本的知识。
F5-Step Into:移动到下一步,如果当前的行是一个方法调用,将进入这个方法的第一行。(可以通过第九条来排除)
F6-Step Over:移动到下一行。如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行。
F7-Step Return:继续执行当前方法,当当前方法执行完毕的时候,控制将转到当前方法被调用的行。
F8-移动到下一个断点处。
想象一下我们平时如何添加断点,通常的做法是双击行号的左边。在debug视图中,BreakPoint View将所有断点都列出来,但是我们可以添加一个boolean类型的条件来决定断点是否被跳过。如果条件为真,在断点处程序将停止,否则断点被跳过, 程序继续执行。
断点属性中有三个选择,启用“Enable”,Hit Count和Conditional中依据我们的需要来选择。
1)Hit Count 是指定断点处的代码段运行多少次,最典型的就是循环,如果要让一个循环执行10次就线程挂起,则指定Hit Count值为10,那么当前的循环执行到第九次的时候就会挂掉。
2)Conditional,顾名思义,就是条件判断,例如我们需要循环变量i==8时,线程挂起,则条件设定为i==8,选择Suspend when "true"。
那如果上面的Hit Count和Conditional都选择的话,如果表达式和值设置不合理则会实效。如果选择Suspend when value changes,那么可能在Conditional在变量值发生改变的时候就挂起。
java代码:
控制台输出(当i等于8的时候就停在断点上了):
0 1 2 3 4 5 6 7
2、异常断点
在断点view中有一个看起来像J!的按钮,我们可以使用它添加一个基于异常的断点,例如我们希望当NullPointerException抛出的时候程序暂停,我们可以这样:
无需在java代码中加断点,debug运行程序遇到指定的NullPointerException自动停下来
3、观察点
这个特性我非常喜欢,他允许当一个选定的属性被访问或者被更改的时候程序执行暂停,并进行debug。最简单的办法是在类中声明成员变量的语句行号左边双击,就可以加入一个观察点。
java断点处:
4、查看变量
在选中的变量上使用Ctrl+Shift+d 或者 Ctrl+Shift+i可以查看变量值,另外我们还可以在Expressions View中添加监视。
java代码
5、改变变量值
我们可以在Debug的时候改变其中变量的值。在Variables View中可以按下图所示操作。
java代码
控制台输出(直接改变变量值为7,控制台就输出7了)
7
6、在Main方法中停止
在Run/Debug设置中,我们可以按如下图所示的启用这个特性。程序将会在main方法的第一行停住
java代码
7、环境变量
我们可以很方便的在Edit Conriguration对话框中添加环境变量
java代码,调用方式
8、Drop to frame
这个功能非常酷,是我第二个非常喜欢的功能,Drop to frame就是说,可以重新跳到当前方法的开始处重新执行,并且所有上下文变量的值也回到那个时候。不一定是当前方法,可以点击当前调用栈中的任何一个 frame跳到那里(除了最开始的那个frame)。主要用途是所有变量状态快速恢复到方法开始时候的样子重新执行一遍,即可以一遍又一遍地在那个你关注 的上下文中进行多次调试(结合改变变量值等其它功能),而不用重来一遍调试到哪里了。当然,原来执行过程中产生的副作用是不可逆的(比如你往数据库中插入 了一条记录)。
堆栈信息
java代码
通过使用Drop To Frame可以回到方法开始处,如下
9、Step 过滤
当我们在调试的时候摁F5将进入方法的内部,但这有个缺点有的时候可能会进入到一些库的内部(例如JDK),可能并不是我们想要的,我们可以在Preferences中添加一个过滤器,排除指定的包。
java代码,如下,当在如下位置按F5直接跳过,不在进入内部,charAt方法为java包下的方法,因此跳过
继续按F5如下图:
可以看到直接跳过了
10、进入、跳过、返回
其实这个技巧是debug最基本的知识。
F5-Step Into:移动到下一步,如果当前的行是一个方法调用,将进入这个方法的第一行。(可以通过第九条来排除)
F6-Step Over:移动到下一行。如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行。
F7-Step Return:继续执行当前方法,当当前方法执行完毕的时候,控制将转到当前方法被调用的行。
F8-移动到下一个断点处。
相关文章推荐
- Ubuntu jdk
- 源码分析-java-Iterator接口和Iterable<T>接口
- Eclipse Dynamic web项目 user library 不能同步到 lib 目录
- java多线程
- 很简单的Java断点续传实现原理
- JAVA设计模式---装饰者模式
- java集合类之List
- java基础
- 总结Java常用到的六个加密技术和代码
- Java 抽象类的详解
- Java语言——构造方法及this关键字
- Java IO中转换流的作用
- JavaWeb项目使用SQLite数据库,数据文件相对路径
- java线程详解
- eclipse构建maven web项目
- 利用RxJava加载图片
- java poi读取excel文件内容
- 成为java高手的八大条件
- Spring4 Bean管理的注解实现
- Java 基础之(六) final关键字