今天调试代码的时候,发现调试器里一个变量后面报了这样的错误:Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate xxx.toString()
。但程序可以正常运行。
debug模式下调试器会调用这个对象的toString()方法,我是通过lombok的@Data注解来生成toString()方法的。而报错的原因就是我在定义类的时候用了双向的引用,举个例子就是:对象A引用了对象B,对象B又反过来引用了对象A,导致出现了一个环形的引用链,使用toString()方法时,会不断的互相循环调用引用对象的方法,导致栈溢出。
解决方法就是在类里面重写toString()方法,覆盖@Data注解实现的toString(),注意不要再互相循环调用方法。如果在代码里不需要用到toString()方法,可以删去@Data注解,用@Getter和@Setter来代替。事实上我的代码里就没有用到toString(),所以程序可以正常运行,只是在debug模式下,调试器报了错误。
debug模式下报错:Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate xxx.toString()
最新推荐文章于 2024-08-03 13:50:28 发布