答案是开发调试器扩展需遵循DAP协议,通过yo code生成模板,实现初始化、断点管理、事件上报等功能,并与语言运行时集成,最终在launch.json中配置即可使用。

要在 Visual Studio Code 中为一种新型编程语言添加调试器支持,核心是开发一个调试器扩展,遵循 VS Code 的调试协议(Debug Adapter Protocol, DAP)。这个过程涉及几个关键步骤,帮助你将自定义语言的运行时与编辑器的调试界面连接起来。
理解 Debug Adapter Protocol (DAP)
DAP 是 VS Code 调试功能的核心通信机制。它定义了编辑器前端(UI)与后端调试服务(Debug Adapter)之间的 JSON-RPC 消息格式。你的扩展不需要直接处理语法高亮或代码补全,而是专注于实现一个“调试适配器”,负责与实际的语言解释器或编译器交互。
适配器通常以独立进程运行,接收来自 VS Code 的请求(如“启动程序”、“设置断点”),再将其转换为底层语言运行时可执行的操作,并返回结果(如变量值、调用栈)。
创建调试扩展的基本结构
使用 vscode-generator-code 脚手架工具可以快速生成调试扩展模板:
- 运行 yo code 并选择 “New Debug Adapter” 类型
- 生成内容包括 package.json 配置、启动逻辑和适配器主进程
- package.json 中需声明调试贡献点,如 debuggers.type、activationEvents 等
type 字段定义语言调试器的唯一标识,后续 launch.json 将引用该类型。
支持模板化设计,基于标签调用数据 支持N国语言,并能根据客户端自动识别当前语言 支持扩展现有的分类类型,并可修改当前主要分类的字段 支持静态化和伪静态 会员管理功能,询价、订单、收藏、短消息功能 基于组的管理员权限设置 支持在线新建、修改、删除模板 支持在线管理上传文件 使用最新的CKEditor作为后台可视化编辑器 支持无限级分类及分类的移动、合并、排序 专题管理、自定义模块管理 支持缩略图和图
实现 Debug Adapter
适配器通常用 Node.js 编写,也可通过 stdin/stdout 与其他语言(如 Python、Rust)集成。主要任务包括:
- 初始化握手:响应 initialize 请求,告知客户端支持的功能(如是否支持断点、变量修改等)
- 处理 launch 或 attach 请求:根据用户配置启动目标程序或连接到正在运行的进程
- 断点管理:接收 setBreakpoints 请求,解析源码位置并通知运行时
- 事件上报:当程序暂停(如断点命中)、异常抛出时,主动发送 stopped 事件
- 支持调试操作:实现 continue、next、stepIn、stepOut 等控制命令
- 提供调试数据:响应 stackTraceRequest 返回调用栈,scopesRequest 返回作用域,variablesRequest 返回变量值
与语言运行时集成
这是最依赖具体语言的部分。常见方式有:
- 若语言有内置调试接口(如 Lua 的 debug.sethook、Python 的 pdb),可在适配器中嵌入脚本注入钩子
- 对于编译型语言,可生成带调试信息的输出,并通过外部调试器(类似 GDB)桥接
- 自研语言可在解释器中暴露 RPC 接口,供适配器调用
关键是将高级调试指令转化为运行时能理解的操作,并准确映射源码位置与执行状态。
基本上就这些。完成适配器后,在 .vscode/launch.json 中配置对应 type 和参数,即可在 VS Code 内使用断点、变量查看、调用栈等标准调试功能。调试协议的设计使得 UI 层与语言逻辑解耦,极大简化了扩展开发。










