【Java】Debug断点调试常用技巧 (2)

我们在调试代码的时候中间出现了异常,但是我们又没有做异常捕获,稀里糊涂地把错误数据存到了数据库中,我们又需要将这些数据给删除,将数据库复原,才能达到之前我们需要的效果。

所以,接下来我们讲一讲如何避免操作资源,强制返回。

public static void saveResource() { System.out.println("shit happens"); System.out.println("save to db"); System.out.println("save to redis"); System.out.println("send message to mq for money payout"); }

debug:

image

我们发现程序出现了异常

image

Force Return

image

它会只打印shit happens,不会继续向下执行了。

image

Trace Current Stream Chain | Stream Debug

image

public static void streamDebug() { // stream chain Arrays.asList(1, 2, 3, 45).stream() .filter(i -> i % 2 == 0 || i % 3 == 0) .map(i -> i * i) .forEach(System.out::print); }

image

image

image

image

左下角平铺模式Flat Mode:

image

断点常用技巧 断点(Breakpoint)

断点:如果把程序想象成一条平滑的线,那么断点就是一个结,可以让程序中断在需要的地方,从而方便其分析。

设置断点:在代码里需要调试的地方,鼠标双击代码行号的左边,再次双击即可取消断点。

在调试中可以设置的断点类型有五种:

行断点:
spring在注册Bean定义(registerBeanDefinition)时,如果是org.springframework.demo.MyBean,就挂起线程,可以开始单步调试了。
对于命中次数(hit count)的使用,一般是在循环中,第N个对象的处理有问题,设置hit count = N, 重调试时,可以方便到达需要调试的循环次数时,停下来调试。

方法断点:
方法断点的好处是可以从方法方法进入或者退出时停下来调试,类似行断点,而且只有行断点和方法断点有条件和访问次数的设置功能。
但是方法断点还有另外一个好处,如果代码编译时,指定不携带调试信息,行断点是不起作用的,只能打方法断点。
有兴趣的可以将Add line number…前的勾去掉,调试下看看。

观察断点:
在成员变量上打的断点。只有对象成员变量有效果,静态成员变量不起作用。
可以设置变量被访问或者设置的时候挂起线程/VM。

异常断点:
系统发生异常时,在被捕获异常的抛出位置处或者程序未捕获的异常抛出处挂起线程/VM, 也可以指定是否包括异常的子类也被检测。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysjff.html