如何设置远程语言服务器节点进程以在 VS 代码中进行调试?

How to set up a remote Language Server node process to be debuggable in VS Code?

我们有一个(内部)VS 代码扩展实现了一种语言的语言服务器协议。我已经检查了 VS Code LS sample 以在服务器上启用调试,但是在示例中,用于初始化 LanguageClientServerOptions 始终是一种类型:

{
  run: NodeModule;
  debug: NodeModule;
}

这里可以将带有端口号的 inspect 参数显式传递给客户端,然后用于调试。

在我们的项目中,我们已经在使用 (() => Promise<StreamInfo>) 版本的 ServerOptions 类型,当然它不提供传递参数以启动服务并提供调试的机制在特定端口。

为了启动语言服务器,我们稍后使用一些参数调用 child_process.spawn(command, args, options) 来启动服务器进程。这里的commandnodeargs["path/to/server/main.js", "path/to/log/output" ]options是:

{
  "cwd":"path/to/workspace/folder",
  "env":{/*various environment propreties, including a hostname, but no port*/}
}

我假设此时我们应该传入一个特定的 argument/env 变量以使服务器可调试?我可以在这里传递什么来监听给定端口上的调试器?

注意:我们正在利用 vscode-remote,但我认为这不会影响答案(除了确保使用的端口在远程计算机上打开)。

我发现的机制是在child_process.spawn(...)中添加“--inspect”作为args的第一个参数,所以args现在有值: ["--inspect", "path/to/server/main.js", "path/to/log/output"]

这会在 127.0.0.1 上的默认节点端口 (9229) 上启动调试侦听器