目录
1、条件断点
2、评估表达式(Evaluate Expression)
3、日志断点
4、方法断点
5、异常断点
6、Field WatchPoint
1、条件断点
假设我们列表循环的某个元素时候才暂停,就用这种方式。具体方式在循环列表打断点,对着断点右键一下,然后会弹出有一行填写condition的,这里就填写条件即可,如下面的例子。
2、评估表达式(Evaluate Expression)
这种可以对断点的值按键ALT+F8,我们再去执行一些函数,想求得自己最后想要的值
3、日志断点
很多时候我们调试的时候更多的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。
具体做法:首先我们在想要输出信息的地方下一个断点;然后右键这个断点,在出现的设置框里面把这个断点的 suspend 属性设置为 False ,这样虽然叫做“断点”,但是并不会真正断下来;然后,我们在 log message 里面填上我们想要输出的日志信息。如下图(注意标红位置):
4、方法断点
方法断点会在进入或退出特定方法时暂停应用的执行。暂停时,您可以检查变量,对表达式求值,然后继续逐行执行,以确定运行时错误的原因。具体方法:在方法第一行打上断点,标志有不同。
5、异常断点
有时候我们只对特定的异常才会感兴趣,那么我们可以自定义补抓相关异常。
具体做法:在调试窗口点击1处,再2处点击增加要补抓什么样异常
6、Field WatchPoint
在上面我们添加异常断点的时候,点击加号的时候,有四个选项;第一个就是我们前面所说的第二种方法断点的添加方式,第三个是异常断点,那么第二个 Field WatchPoint 是干什么的呢?
有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给修改了,罪魁祸首是谁?Java虽然是值传递,但是引用也可以是值;对象全部存放在堆上面,而堆是被所有线程共享的,因此在非常复杂的场景下,你根本不知道这些共享变量被谁修改了,这样非常危险;在多线程环境下,不变性是一个很重要的特性,我们看到高并发的语言诸如 Erlang, Scala 对于这种不变性都有着某种程度的支持。
具体做法:对着变量那行打断点,然后选择第二个;可以查看变量多种状态改变的断点设置;