Chr*_*ris 3 java language-server-protocol
我当前正在编写语言服务器(在lsp4j之上),并且需要调试我的语言服务器。语言服务器协议服务器使用stdin和stdout与客户端进行通信。
现在,我想调试从客户端启动的服务器(VSCode),因此我为生成的JVM进程添加了调试标志:
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999
Run Code Online (Sandbox Code Playgroud)
突然执行此操作后,即使suspend = 0并且我确认端口已打开并且没有发生防火墙恶意代码,服务器也无法再工作。
我决定手动运行命令行,我看到一个进程在接收到调试参数后要做的第一件事就是向stdout输出以下内容:
Listening for transport dt_socket at address: 9999
Run Code Online (Sandbox Code Playgroud)
(发射时不带双引号)
我认为这是我无法调试语言服务器的原因,因为将任何不属于语言服务器协议规范的内容输出到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页面上提供解决方案。