4

如果我在这里的细节有点低,我很抱歉,但主要问题实际上是试图找到我的代码的问题。我正在更新我自己的基于语言服务器示例(https://code.visualstudio.com/docs/extensions/example-language-server)的旧扩展。我遇到了一个问题,当我使用 F5 运行代码的客户端部分时,调试窗口会触发,我得到:

CSSLint 语言客户端服务器在过去 3 分钟内崩溃了 5 次。服务器不会重新启动。

好的......所以......事情就是这样。我的扩展客户端代码中的问题视图没有显示任何内容。该代码窗口的 DevTools 没有显示任何内容。

我的服务器代码的问题视图没有显示任何内容。开发工具,同上。

对于 Extension Developer Host 实例,DevTools 确实显示了这一点:

messageService.ts:126 CSSLint 语言客户端服务器在过去 3 分钟内崩溃了 5 次。服务器不会重启。e.doShow@messageService.ts:126

但是我无法深入研究细节以找到错误。所以问题是 - 假设我的服务器代码失败了,错误究竟在哪里出现?

4

1 回答 1

0

这是我通常用来跟踪服务器崩溃的方法(我假设您的服务器是用 JavaScript / TypeScript 编写的)。

使用以下服务器选项:

    let serverModule = "path to your server"
let debugOptions = { execArgv: ["--nolazy", "--debug=6009"] };
let serverOptions = {
    run: { module: serverModule, transport: TransportKind.ipc },
    debug: { module: serverModule, transport: TransportKind.ipc, options: debugOptions}
};

这里的关键是使用 TransportKind.ipc。服务器中发生并打印到 stdio 的错误将显示在与您的服务器关联的输出通道中(输出通道的名称是传递给 LanguageClient 的名称)

如果要调试服务器启动/初始化序列,可以将 debugOptions 更改为:

let debugOptions = { execArgv: ["--nolazy", "--debug-brk=6009"] };

如果扩展以调试模式启动(例如,例如使用 F5 从 VS Code 启动),则 LanguageClient 会自动以调试模式启动服务器。如果扩展正常启动(例如作为 VS Code 中的真正扩展),那么服务器也会正常启动。

为了使这一切正常工作,您需要最新版本的 LSP 节点 npm 模块,用于服务器和客户端(例如 2.6.x)

于 2017-01-19T09:02:01.063 回答