如何使远程调试JVM不在stdout,stderr上输出文本?

时间:2017-07-22 14:39:46

标签: java language-server-protocol

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

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

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

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

我决定手动运行命令行,我看到进程在收到调试参数后首先执行的操作是将以下内容输出到stdout:

Listening for transport dt_socket at address: 9999

(没有双引号发出)

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

因此,我的问题是,以迂回的方式询问是否可以通过另一个JVM参数在stdout,stdin,stderr上发出内部JVM消息?

1 个答案:

答案 0 :(得分:5)

更新

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

  

-Xrunjdwp:运输= dt_socket,服务器= Y,暂停= n时,地址= 9999,安静= Y

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

相关问题