震惊,IDEA会私自执行你的代码?--- IDEA在debug时调用toString()方法的问题及解决

Posted Megustas_JJC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了震惊,IDEA会私自执行你的代码?--- IDEA在debug时调用toString()方法的问题及解决相关的知识,希望对你有一定的参考价值。

what?IDEA在debug时会自动私自调用我们的代码么?是的,会调用对象的toString()方法。
一般在debug时很难发现这种现象,并且多数情况下调用一下toString()方法没有什么问题(但是一些客户端服务端交互的项目,会有意想不到的问题出现。例如Dubbo的AbstractConfig类,对这个类的debug会导致其子类ReferenceConfig的initialized属性错误的被修改为true,进而无法正确的生成Dubbo代理。),就使我们更不容易察觉。但是今天在debug一个本地模拟基于Netty的RPC的项目时,发现consumer客户端并没有执行任何provider端提供的方法,provider服务端竟然收到了来自客户端的数据,几番排查,发现是idea在debug模式下的私自调用。
provider端:
在这里插入图片描述

当收到来自客户端建立的连接的数据时,会执行channelRead方法,这里我们打了日志。
consumer客户端:
在这里插入图片描述

客户端rpc调用服务端的DemoService方法,这里我们是debug模式,在方法调用之前打了断点,也就是此时还没有进行sayHello方法的调用,但是我们看下服务端的日志

在这里插入图片描述

可以惊奇的发现,在我们「真正」调用对象方法之前,idea已经私自调用了DemoService的toString()方法。

问题发现了,那么如何解决呢?
IDEA在debug时调用toString()方法的情况是可以在配置中关掉的,在idea设置中更改下默认设置就好
在这里插入图片描述

取消’toString()’设置的勾选就可以了

以上是关于震惊,IDEA会私自执行你的代码?--- IDEA在debug时调用toString()方法的问题及解决的主要内容,如果未能解决你的问题,请参考以下文章

你真会看idea中的Log吗?

idea中的git操作

IDEA常用插件汇总

IDEA常用插件汇总

idea提交有一行对比不要

IntelliJ IDEA 提高执行代码速度的好办法