关于idea的八种断点调试
背景:在日常开发中,我们经常会使用到idea,那么debug就更不用说了,但是你真的会打断点么,看完这篇文章再下结论吧 (ps,部分图片因为公司做过内部分享,所以打码)
一:行断点
也就是我们去给某一行加上断点,很基础也很常用
二:方法断点
在方法的行去加上断点,这样在方法的进入和方法的结束,都可以卡住(用于监控方法的调用)
三:属性断点
在属性上打上断点,用于监控属性的变化 (适用于维护别人的代码,监控某个值在哪里做了改变)
四:异常断点
在属性上打上断点,用于监控属性的变化 (适用于维护别人的代码,监控某个值在哪里做了改变)
如上,如果某行代码np异常我想快速定位到,那么我就可以在异常行打上发生异常的断点,一旦发生异常就可以自动卡住,如下图
五:条件断点
某个条件触发的断点 (属实废话文学了)适用于业务上某些数据不符合预期,快速定位到有问题的数据对象
比如上面的例子,我想定位到数据库中哪条数据有问题是负数导致了我的总数也负了
如下图,我们可以看到,断点卡在了负数分数的对象上
六:源断点
这个直接上需求解释,日常调试中,我想知道一个循环中的每次变量值,请问怎么办?(老夫上来就sout,我猜你也是这么想的,其实有更优雅的方法哦)
那么我们尝试打一个源断点,如下图
运行结果如下,可以看出每行的值都展示出来了而且不会存在断点卡住的情况,左右二图的区别在于是否勾选展示断点行信息
七:多线程断点
在多线程的场景下,我们如果想单独调试某个线程的断点,而被其他线程影响
如上图,我只是想调试下面的线程,而不想上面的线程执行影响我,那么我只需要打上多多线程断点即可,操作如下
(ps:一定要勾选自己想要调试的线程)
运行结果如下:我们可以看到,卡在了第二个线程,并且第一个线程无输出
八:stream断点
用于java8+等版本的stream使用时的断点,可以充分展示每个链式操作的数据流转过程
九:断点回退
用于方法级别的调试时,回退到方法的进入之前,用于手速太快,不想重启,想重新执行一次断点的场景
ps:(1.一定要是方法调用,2.引用对象不建议使用,回退后对象的内容会发生改变)
如下,我们可以看到回退后,基本数据类型sum,从2回退到了0,可以重新进入方法