调试崩溃的语言服务器



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

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

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

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

对于ExtensionDeveloperHost实例,DevTools确实显示了以下内容:

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

但我无法深入挖掘细节来发现漏洞。所以问题是——假设我的服务器代码失败了,错误究竟在哪里可用?

以下是我通常用来跟踪服务器崩溃的操作(我假设您的服务器是用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)

最新更新