记一次IDEA异常断点的使用场景,真香!

兄弟们我发现啊

在IDEA里这种断点就是异常断点

有的时候真能起到大作用

怎么回事呢

我前两天不是接手一个旧的项目嘛

他这个knife4j的文档就打不开

我们看一下啊

他就报一个这种堆栈溢出的异常

大家看Stack overflow error

然后呢

这里面找不到任何有意义的信息

而且它有1,000多个重复的堆栈信息

大家看

没有什么有用的信息

其实是怎么回事呢哈

其实就是我们在这个knife4j这里边

同时也开启了springdoc的这个配置

然后呢你一不小心

就会在某一个Controller的

这个参数对象里边

写了循环的递归引用

比如说在这里member引用了group对象

然后group呢

又引用了member类的这个参数

所以就会报这个错误

但是呢我当时…这是个demo哈

我当时接这个项目的时候

不知道是哪个接口有问题

很难排查

所以呢

这时候我们就可以用这个异常断点

我们在这加一个java exception

然后我们找这个Stack overflow的异常

把它加上好

清一下哈

然后我们再刷新

这时候你稍等一下

它比较慢

好大家看他出来了哈

然后我们在下边这往下找一下

大家看往下点一点

大家看这还在涨

我们就等他这两个数都在涨

都等这两行

就你点一点啊

应该是有两个数在涨

等他都不涨了

比如说他信息都蹦出来了

OK他不蹦了

大家看这两个数都不蹦了

然后把它拉到底

注意看啊

这是第一个堆栈信息

然后我们往上往上找

有一个是计算路径的一个方法

差不多在这

大家看把它缩小一下

在这里

然后呢我们看这几个参数

主要是这个

大家看它就能看到你是哪个controller有问题了

大家看/db/members

其实就是我刚才给大家看的这个members

那怎么解决这个问题呢

其实我相信啊

一般情况下大家都是不不小心的

因为一般情况下

这种参数

一般不会出现这种递归引用的

所以呢我这也是为了写个demo

大家直接把它去掉就可以了

但如果你真的需要递归引用

那我建议你把它拆开

就说把这group单独再写一个group

然后里面没有member了

这样再去引用一次

那我当时是什么情况呢

是不小心继承了一个类哈

大家看我先把这个去掉

我们先验证一下

OK然后呢

我们刷新一下

大家看 这个文档就出来了

然后当时项目怎么回事呢

就是有一个这个参数类啊

不小心继承了一个第三方的类

那个第三方的类呢

又用到了这个ReferenceQueue

这个类这里边就有循环引用了哈

这是JDK里的

大家看这个ReferenceQueue

里边用到了这个Reference,在这里

然后这里边呢

又用到了ReferenceQueue

所以呢

大家看啊

我再给大家试一下

我只要继承了这个

或者这里边有这个类的属性哈

都有问题

我们来试一下

好我们刷新一下

那他又听到断点了

把这个放开

看看他还是抱这个错误

还是这个错误

所以呢像这种问题

我们最主要的是通过这种异常断点

能去定位到哪一个Controller是有问题的

剩下它就好解决了

最后更新于

这有帮助吗?