概述
在 Vim/Neovim 中,为喜欢的编程语言设置 DAP(Debug Adapter Protocol)来完成代码调式并不是非常直接的。像 vimspector 和 nvim-dap 这样用于调式的插件大家都能搜到,但设置起来还是需要下一些功夫的,不过对于真正喜欢用 vim 编程的人来说,总会把它弄好的。
本文将讲述如何在 vim/Neovim 中设置 vimspector 和 Termdebug 来对 Rust 代码进行调试。
cargo.toml
本文中的代码使用 cargo 来管理项目和包。为确保调式 symbols 能正确生成,可在 cargo.toml 里添加几行,如下:
[profile.dev]
opt-level = 0
debug = true
[profile.release]
opt-level = 3
debug = false
vimspector
它是 vim 的插件,可以使用 vim-plug Vundle 等管理工具进行安装,在 .vimrc/init.vim 中添加如下行进行安装:
Plug 'puremourning/vimspector'
Rust 支持 GDB 和 CodeLLDB,目前推荐的是 CodeLLDB,使用如下命令进行安装(或者,在调试时会自动安装):
:VimspectorInstall CodeLLDB
lldb-vscode.json
{
"adapters": {
"lldb-vscode": {
"variables": {
"LLVM": {
"shell": "brew --prefix llvm"
}
},
"attach": {
"pidProperty": "pid",
"pidSelect": "none"
},
"command": [
"${LLVM}/bin/lldb-vscode"
],
"env": {
"LLDB_LAUNCH_FLAG_LAUNCH_IN_TTY": "YES"
},
"name": "lldb"
}
}
}
.vimrc/init.vim
let g:vimspector_enable_mappings = 'HUMAN'
" nmap <leader>dd :call vimspector#Launch()<CR>
" nmap <leader>dx :VimspectorReset<CR>
" nmap <leader>de :VimspectorEval
" nmap <leader>dw :VimspectorWatch
" nmap <leader>do :VimspectorShowOutput
在 Rust 项目根目录(和 Cargo.toml 同级)创建 .vimspector.json 来配置 adapter:
.vimspector.json
{
"configurations": {
"launch": {
"adapter": "CodeLLDB",
"configuration": {
"request": "launch",
"program": "${workspaceRoot}/target/debug/${binaryName}",
"args": ["*${ProgramArgs}"]
}
}
}
}
按 F5 即可进入调试
https://alpha2phi.medium.com/setting-up-neovim-for-rust-debugging-termdebug-and-vimspector-df749e1ba47c