我司有一套自研的 RPC 框架,公司现有得开发模式是 RPC 服务提供端不 debug 而用单元测试来完成开发循环,这种方式有利有弊,我个人还是希望在单元测试外可以自由的 调试
这样,有些情况远比单元测试要高效。那么问题来了,由于 RPC 服务端是已容器方式启动的,所以无法直接在 idea 工程中断点调试,有两种办法可以解决:1.自己实现一个启动器,抛弃容器自己启动 RPC 服务;2.使用 远程调试
调试已经通过容器启动的 RPC 服务。第一种我觉得办法是最优雅的,但是需要自己开发启动器,时间较长(正在尝试实现),在开发出来之前,可以先临时使用第二种办法应急。好了,我们其实只要知道怎样远程调试就好了。
开启远程调试可以分成两步。
第一步,在 JVM 启动时加上参数,告知 JVM 我们将要远程调试:
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=5555,server=y,suspend=n
第二步,在 idea 中配置开始远程调试
配置好 Run/Debug Configurations
注意上图中 5555
对应了我们在 JVM 参数中的 address=5555
像本地调试一样,用绿虫子启动,就开始监听并调试了,断点也会停了,启动后控制台会输出 Connected to the target VM, address: 'localhost:5555', transport: 'socket'
,当停止调试后,控制台会输出 Disconnected from the target VM, address: 'localhost:5555', transport: 'socket'
其实,做这个远程调试的初衷,就是为了减轻自己开发的负担,让自己整个开发工作流更加顺畅,我其实大可以按照公司的方式,用单元测试来做,但是,能让自己提升效率的事,为什么不琢磨一下呢,不循规蹈矩,爱折腾,我觉得才是一种优良的品质。