背景:在日常开发中,我们经常会使用到idea,那么debug就更不用说了,但是你真的会打断点么,看完这篇文章再下结论吧 (ps,部分图片因为公司做过内部分享,所以打码)

一:行断点

也就是我们去给某一行加上断点,很基础也很常用

java idea 断点 停止执行下面_java

二:方法断点

在方法的行去加上断点,这样在方法的进入和方法的结束,都可以卡住(用于监控方法的调用)

java idea 断点 停止执行下面_条件断点_02

三:属性断点

在属性上打上断点,用于监控属性的变化 (适用于维护别人的代码,监控某个值在哪里做了改变)

java idea 断点 停止执行下面_条件断点_03

四:异常断点

在属性上打上断点,用于监控属性的变化 (适用于维护别人的代码,监控某个值在哪里做了改变)

java idea 断点 停止执行下面_java idea 断点 停止执行下面_04

如上,如果某行代码np异常我想快速定位到,那么我就可以在异常行打上发生异常的断点,一旦发生异常就可以自动卡住,如下图

java idea 断点 停止执行下面_条件断点_05

java idea 断点 停止执行下面_java idea 断点 停止执行下面_06

java idea 断点 停止执行下面_条件断点_07

五:条件断点

某个条件触发的断点 (属实废话文学了)适用于业务上某些数据不符合预期,快速定位到有问题的数据对象

java idea 断点 停止执行下面_多线程_08

比如上面的例子,我想定位到数据库中哪条数据有问题是负数导致了我的总数也负了

如下图,我们可以看到,断点卡在了负数分数的对象上

java idea 断点 停止执行下面_多线程_09

六:源断点

这个直接上需求解释,日常调试中,我想知道一个循环中的每次变量值,请问怎么办?(老夫上来就sout,我猜你也是这么想的,其实有更优雅的方法哦)

java idea 断点 停止执行下面_多线程_10

那么我们尝试打一个源断点,如下图

java idea 断点 停止执行下面_多线程_11

运行结果如下,可以看出每行的值都展示出来了而且不会存在断点卡住的情况,左右二图的区别在于是否勾选展示断点行信息

七:多线程断点

在多线程的场景下,我们如果想单独调试某个线程的断点,而被其他线程影响

java idea 断点 停止执行下面_多线程_12

如上图,我只是想调试下面的线程,而不想上面的线程执行影响我,那么我只需要打上多多线程断点即可,操作如下

java idea 断点 停止执行下面_多线程_13

(ps:一定要勾选自己想要调试的线程)

运行结果如下:我们可以看到,卡在了第二个线程,并且第一个线程无输出

java idea 断点 停止执行下面_条件断点_14

八:stream断点

用于java8+等版本的stream使用时的断点,可以充分展示每个链式操作的数据流转过程

java idea 断点 停止执行下面_java_15

九:断点回退

用于方法级别的调试时,回退到方法的进入之前,用于手速太快,不想重启,想重新执行一次断点的场景

ps:(1.一定要是方法调用,2.引用对象不建议使用,回退后对象的内容会发生改变)

如下,我们可以看到回退后,基本数据类型sum,从2回退到了0,可以重新进入方法

java idea 断点 停止执行下面_java_16