记一次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是有问题的
剩下它就好解决了
最后更新于
这有帮助吗?