如何设置远程语言服务器节点进程以在 VS 代码中进行调试?
How to set up a remote Language Server node process to be debuggable in VS Code?
我们有一个(内部)VS 代码扩展实现了一种语言的语言服务器协议。我已经检查了 VS Code LS sample 以在服务器上启用调试,但是在示例中,用于初始化 LanguageClient
的 ServerOptions
始终是一种类型:
{
run: NodeModule;
debug: NodeModule;
}
这里可以将带有端口号的 inspect 参数显式传递给客户端,然后用于调试。
在我们的项目中,我们已经在使用 (() => Promise<StreamInfo>)
版本的 ServerOptions
类型,当然它不提供传递参数以启动服务并提供调试的机制在特定端口。
为了启动语言服务器,我们稍后使用一些参数调用 child_process.spawn(command, args, options)
来启动服务器进程。这里的command
是node
,args
是["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) 上启动调试侦听器
我们有一个(内部)VS 代码扩展实现了一种语言的语言服务器协议。我已经检查了 VS Code LS sample 以在服务器上启用调试,但是在示例中,用于初始化 LanguageClient
的 ServerOptions
始终是一种类型:
{
run: NodeModule;
debug: NodeModule;
}
这里可以将带有端口号的 inspect 参数显式传递给客户端,然后用于调试。
在我们的项目中,我们已经在使用 (() => Promise<StreamInfo>)
版本的 ServerOptions
类型,当然它不提供传递参数以启动服务并提供调试的机制在特定端口。
为了启动语言服务器,我们稍后使用一些参数调用 child_process.spawn(command, args, options)
来启动服务器进程。这里的command
是node
,args
是["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) 上启动调试侦听器