我目前正在编写一个语言服务器(在 lsp4j 之上),并且需要调试我的语言服务器。语言服务器协议服务器使用标准输入和标准输出与客户端通信。
现在我想调试一个从客户端(VSCode)启动的服务器,所以我为生成的 JVM 进程添加了调试标志:
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999
突然执行此操作后,服务器不再工作,即使suspend = 0 并且我确认端口已打开并且没有发生防火墙故障。
我决定手动运行命令行,我看到一个进程在收到调试参数后所做的第一件事就是将以下内容输出到标准输出:
Listening for transport dt_socket at address: 9999
(不带双引号发出)
我相信这是我无法调试语言服务器的原因,因为将任何不属于语言服务器协议规范的内容输出到标准输出或标准输入会强制客户端拒绝服务器。
因此,我的问题是以迂回的方式询问是否可以通过另一个 JVM 参数使 stdout、stdin、stderr 上的内部 JVM 消息静默?