如何使远程调试 JVM 不输出标准输出文本,标准输出?



我目前正在编写一个语言服务器(在lsp4j之上(,需要调试我的语言服务器。语言服务器协议服务器使用 stdin 和 stdout 与客户端通信。

现在我想调试从客户端 (VSCode( 启动的服务器,所以我为生成的 JVM 进程添加了调试标志:

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999

突然执行此操作后,服务器不再工作,即使挂起= 0并且我确认端口已打开并且没有发生防火墙恶意

。 我决定手动运行命令行,我看到进程在收到调试参数后做的第一件事就是将以下内容输出到 stdout:

Listening for transport dt_socket at address: 9999

(不带双引号发出(

我相信这就是我无法调试语言服务器的原因,因为将不属于语言服务器协议规范的任何内容输出到 stdout 或 stdin 会强制客户端拒绝服务器。

因此,我的问题是,以迂回的方式询问是否有可能通过另一个JVM参数使stdout,stdin,stderr上的内部JVM消息保持沉默?

更新:

答案似乎是",quiet=y"作为附加参数。

-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999,quiet=y

感谢 Christian Dietrich 在 lsp4j github 页面上提供解决方案。

最新更新