DAP (Debug Adapter Protocol)
nvim-dap 是 Neovim 的 Debug Adapter Protocol 客户端实现。
nvim-dap 允许你:
- 启动应用程序进行调试
- 附加到正在运行的应用程序并对其进行调试
- 设置断点并单步执行代码
- 检查应用程序的状态

安装
- 像安装其他 Neovim 插件一样安装 nvim-dap:
git clone https://codeberg.org/mfussenegger/nvim-dap.git ~/.config/nvim/pack/plugins/start/nvim-dap- 或者使用 vim-plug:
Plug 'mfussenegger/nvim-dap' - 或者使用 packer.nvim:
use 'mfussenegger/nvim-dap'
- 使用
:helptags ALL或:helptags <PATH-TO-PLUGIN/doc/>生成 nvim-dap 的文档
支持的 Neovim 版本:
- 最新的 nightly
- 0.12.x(推荐)
- 0.11.7
您需要为每种语言安装并配置调试适配器。请参阅
- :help dap.txt
- Debug-Adapter Installation wiki
:help dap-adapter:help dap-configuration
用法
典型的调试流程包括:
- 通过
:DapToggleBreakpoint或:lua require'dap'.toggle_breakpoint()设置断点。 - 通过
:DapNew和:DapContinue或:lua require'dap'.continue()启动调试会话并恢复执行。 - 通过
:DapStepOver、:DapStepInto或对应的 函数:lua require'dap'.step_over()和:lua require'dap'.step_into()单步执行代码。 - 检查状态:
- 通过内置的 REPL:
:lua require'dap'.repl.open()- 尝试输入一个表达式后按 ENTER 来求值。
- 尝试诸如
.help、.frames、.threads等命令。 - 具有结构的变量可以通过在对应行按 ENTER 来展开和折叠。
- 通过 widget UI(
:help dap-widgets)。通常您会在需要时临时检查值、 线程和堆栈跟踪,而不是始终显示这些信息,但您也可以创建侧边栏用于永久显示 - 通过 UI 扩展:
- IDE 风格:nvim-dap-ui
- 介于 IDE 风格的 nvim-dap-ui 和内置 widget 之间的中间方案:nvim-dap-view
- 显示内联值:nvim-dap-virtual-text
- 通过内置的 REPL:
请参阅 :help dap.txt、:help dap-mapping 和 :help dap-api。
提示:
方向键是用于逐步执行代码的键位映射的良好候选项,因为它们的 方向与你将要步进的方向相似。
- Down: 单步跳过
- Right: 单步进入
- Left: 单步跳出
- Up: 重启帧
你可以在调试会话期间使用事件监听器临时设置键位映射。
参见 :help dap-listeners。
支持的语言
理论上,所有存在调试适配器的语言都应得到 支持。
Wiki 由社区维护。如果你有一个尚未列出的 适配器可以正常工作,请扩展 Wiki。
一些调试适配器具有 语言特定 扩展。 建议使用它们而不是手动配置,因为它们通常 维护得更好。
如果 Wiki 中关于某个调试适配器的说明不起作用,请考虑 调试适配器可能自说明编写以来已发生了更改。 你可能需要阅读调试适配器的发布说明,或尝试使用 旧版本。如果你发现过时的示例,请更新 Wiki。
目标
-
在 Neovim 中拥有一个基本的调试器。
-
可扩展性,并兼作 DAP 客户端库。这允许其他插件 扩展调试体验。无论是通过改进 UI,还是通过 使调试应用程序的某些部分变得更加容易。
所有已知的扩展都列在 Wiki 中。Wiki 由社区 维护。如果你构建了一个新扩展,或者发现了一个 未列出的扩展,请添加它。
非目标
-
调试适配器的安装不在范围内。重新发明一个包管理器不是编辑器插件的职责。请使用你的系统包 管理器。使用 Nix。使用 Ansible。
-
Vim 支持。这不会发生。请改用 vimspector。
替代方案
贡献
欢迎贡献:
- 提供关于可用性的具体反馈。
- 对问题进行分类。人们遇到的许多问题都是特定于调试适配器的。
- 改进上游调试适配器的文档,使其更具编辑器无关性。
- 改进 Wiki。但请避免将其变成本应放在上游的全面调试适配器文档。
- 编写扩展。
在进行直接的代码贡献之前,请创建一个讨论或问题,以澄清该更改是否在 nvim-dap 核心的范围内。
请保持拉取请求的专注,不要同时更改多个内容。
功能
- 启动调试适配器
- 附加到调试适配器
- 切换断点
- 带条件的断点
- 日志点
- 设置异常断点
- 单步跳过、单步进入、单步跳出
- 单步后退、反向继续
- 跳转
- 重启
- 停止
- 暂停
- 求值表达式
- REPL(包括显示线程、帧和作用域的命令)