Visual Studio集成clangd时LSP连接立即触发ConnectionLostException
启用LSP详细通信日志
打开Visual Studio的「工具->选项->文本编辑器->语言服务->高级」,找到日志相关选项,开启「详细日志记录」和「记录JSON-RPC通信内容」。日志会生成在%APPDATA%\Microsoft\VisualStudio\<你的VS版本号>\Logs目录下,重点查看LSP相关日志文件,对比clangd返回的initialize响应是否符合LSP规范,是否存在字段缺失或格式错误。调试clangd进程并输出详细日志
修改扩展启动clangd的代码,添加--log=verbose参数,将clangd的日志输出重定向到本地文件(比如通过设置进程的标准输出流到文件)。同时可以在Visual Studio中附加到clangd进程,实时查看它接收到initialize请求后的处理流程,确认是否有内部报错导致进程退出。检查JSON-RPC兼容性
Visual Studio的LSP客户端对部分LSP规范细节有特定要求,比如initialize请求中的capabilities字段,需确保传递给clangd的客户端能力集符合clangd的预期。可以对比clangd官方文档中要求的初始化参数,检查是否存在字段遗漏或格式不匹配的情况——这类问题常导致clangd终止连接。启用Visual Studio扩展调试日志
设置环境变量VSLOGGER_TRACELEVEL=4后重启Visual Studio,这会生成更详细的扩展加载、进程启动及RPC通信日志。在VS日志目录中查找包含你的LSP扩展名称的日志文件,定位ConnectionLostException发生的具体节点,排查是否存在流创建失败、进程异常退出等问题。对比官方LSP示例代码
拿微软官方的LSP扩展示例与你的代码对比,重点检查语言服务进程启动、通信流初始化、initialize请求处理的逻辑差异。比如确认是否正确设置了双向通信流,是否在启动clangd后等待初始化完成再进行后续操作。
内容的提问来源于stack exchange,提问作者BeigeAlert

