Dubbo源码 之 服务引用调试ref不为空,ref对象被修改,ref == null

最近在用dubbo2.5.x版本源码进行调试服务引用源码时,发现程序运行到getObject的get方法的时候,ref不为空,导致不走init方法,不走init方法下面所有的服务引用程序调试均无法debug执行,因为服务暴露和引用都是在一台机器上运行,猜想是不是服务暴露的时候在jvm中已经缓存了,但是转念一想这个ref是消费端调用服务的时候才创建的proxy,这个proxy是通过代理工厂类(ProxyFactory) 为服务接口生成代理类,并让代理类去调用 Invoker 逻辑。跟服务暴露是没有关系的。

😭😭😭🤪🤪🤪 后台查看官方文档才看到相关解释。

这里需要特别说明一下,如果你对 2.6.4 及以下版本的 getObject 方法进行调试时,会碰到比较奇怪的的问题。这里假设你使用 IDEA,且保持了 IDEA 的默认配置。当你面调试到 get 方法的if (ref == null)时,你会发现 ref 不为空,导致你无法进入到 init 方法中继续调试。导致这个现象的原因是 Dubbo 框架本身有一些小问题。该问题已经在 pull request #2754 修复了此问题,并跟随 2.6.5 版本发布了。如果你正在学习 2.6.4 及以下版本,可通过修改 IDEA 配置规避这个问题。首先 IDEA 配置弹窗中搜索 toString,然后取消Enable 'toString' object view勾选或者是classes的list不包含我们调试的程序。具体如下:

然后在debug模式下调试正常。如果开启了toString视图预览,在内部已经创建了proxy但是在debug模式下是debug不到的。

 

个人才疏学浅、信手涂鸦,dubbo框架更多模块解读相关源码持续更新中,感兴趣的朋友请移步至个人公众号,谢谢支持😜😜......

公众号:wenyixicodedog

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值