震惊,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()’设置的勾选就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值