关于-nvim-dap

参考 h dap.txt.

nvim-dap 是一个客户端 (client), 需要安装是一个 debug adapter (适配器), 来和指定语言的 debugger 对接 (server).

nvim-dap 和 debug adapter 之间通过 Debug Adapter Protocol 交流.

为了开始 debug, 每个语言需要配置两个东西:

  • a debug adapter (dap-adapter)
  • 如何将 debugger 连接到应用 (dap-configuration)

可以在 这个网站获取 debug adapters.

Debug adapter 的配置和安装指导, 见 这个网站

Debug Adapter Protocol 的官网

dap-adapter 条目

dap-adapter 可以通过 nvim 下载, 也可以直接连接到一个已存在的上.

dap.adapters 这个表来配置 nvim 的 debug adapters.

如, 配置 python 的 debug adapter:

1
2
3
4
5
6
local dap = require('dap')
dap.adapters.python = {
type = 'executable';
command = os.getenv('HOME') .. '/.virtualenvs/tools/bin/python';
args = { '-m', 'debugpy.adapter' };
}

type 包括:

  • executable, 暗示需要下载, 文档中还有其相关的命令
  • server, 暗示直接连接已存在的, 文档中还有其相关的命

dap-configuration 条目

配置是为了, 启动和连接 debug adapter.

配置写在 dap.configurations 表中, 运行 dap-continue, nvim 就会寻找当前文件类型的配置.

如, python 配置:

1
2
3
4
5
6
7
8
9
10
11
12
local dap = require('dap')
dap.configurations.python = {
{
type = 'python';
request = 'launch';
name = "Launch file";
program = "${file}";
pythonPath = function()
return '/usr/bin/python'
end;
},
}

几个键字的含义:

  • type, 决定使用哪个 debug adapter
  • request, attach 表明需要连接到某个程序, launch 表明需要启动一个 debugee
  • name, 似乎随便取

有一些特殊变量可用:

  • ${file}: Active filename
    • ${fileBasename}: The current file’s basename
    • ${fileBasenameNoExtension}: The current file’s basename without extension
    • ${fileDirname}: The current file’s dirname
    • ${fileExtname}: The current file’s extension
    • ${relativeFile}: The current file relative to |getcwd()|
    • ${relativeFileDirname}: The current file’s dirname relative to |getcwd()|
    • ${workspaceFolder}: The current working directory of Neovim
    • ${workspaceFolderBasename}: The name of the folder opened in Neovim
    • ${command:pickProcess}: Open dialog to pick process using |vim.ui.select|
    • ${env:Name}: Environment variable named Name, for example: ${env:HOME}.

参考网页

nvim-dap-ui 插件为 nvim-dap 提供了 UI 界面. :h dapui.setup() 可查看配置.

UI 界面的 toggle 是 require("dapui").toggle()

打开 Floating Elements 为 require("dapui").float_element(<element ID>, <optional setting>)

显示值: require("dapui").eval(<expression>)


关于-nvim-dap
http://example.com/2023/01/29/关于-nvim-dap/
作者
Jie
发布于
2023年1月29日
许可协议