前言

前面配置好rust开发环境后,还需要一个调试功能就能用了。
不清楚的可以回看我的rust-vim安装记录
调试器,找了几款,最后还是觉得还是使用vimspector这个用的习惯,捣鼓两个整合了一下基于vimspector的调试环境,快捷键不用重新再配置。

效果图:

rust-vimspector-debug效果图.jpg

这几天换了mac M2,把功能都迁移过来,完可用,这图就是M2上载图的。
另外补全相关的配置,需要coc的一些额外配置。
vim CocConfig参数设置说明

流程

  • 安装vimspector插件: puremourning/vimspector
  • 添加配置文件:
    • lldb-vscode.json
    • .vimspector.json

安装vimspector插件

添加插件,然后执行PlugInstall,路径:

~/.config/nvim/init.vim

--enable-rust 表示要启用的语言支持,可以从官网查看支持的语言。

1
Plug 'puremourning/vimspector', {'do': './install_gadget.py --enable-rust'}

在vim中执行:

1
:PlugInstall

添加配置到init.vim

~/.config/nvim/init.vim

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"==============================================================================
" rust
"==============================================================================
nnoremap <leader>rr :CocCommand rust-analyzer.run<CR>

"==============================================================================
" vimspector 调式配置
"==============================================================================
# 指定快捷键影射为 HUMAN 模式,还有 VISUAL_STUDIO 模式
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
let g:vimspector_install_gadgets = [ 'debugpy', 'vscode-go', 'CodeLLDB' ]

其它建议的配置项:

1
2
3
4
5
6
" mnemonic 'di' = 'debug inspect' (pick your own, if you prefer!)

" for normal mode - the word under the cursor
nmap <Leader>di <Plug>VimspectorBalloonEval
" for visual mode, the visually selected text
xmap <Leader>di <Plug>VimspectorBalloonEval

您可能还希望添加用于向上/向下导航堆栈、切换断点窗口和显示反汇编的映射,例如:

1
2
3
4
5
nmap <LocalLeader><F11> <Plug>VimspectorUpFrame
nmap <LocalLeader><F12> <Plug>VimspectorDownFrame
nmap <LocalLeader>B <Plug>VimspectorBreakpoints
" 反汇编的映射
nmap <LocalLeader>D <Plug>VimspectorDisassemble

vimspector 配置

需要添加两个配置文件:

  1. lldb-vscode.json
  2. .vimspector.json

1.添加 lldb-vscode.json

lldb-vscode.json文件所以在这个路径,如果没有.gadgets.d需要创建一个,我的 路径:
~/.vim/plugged/vimspector/gadgets/macos/.gadgets.d/lldb-vscode.json
这里说明一个,这个路径是.vim,我用的是nvim没错,只是我把插件路径都统一到了.vim这个目录下了。
最开还没有使用nvim,用的是vim

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"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"
}
}
}

2.添加 .vimspector 文件

这个文件添加到子项目下,比如下面是我的项目结构,
添加到 vector_test 这个项目下,偿试在rust-learning上添加,子项无法启动vimspector

1
2
3
4
5
6
7
rust-learning/
\--src/
\--target/
\--string_test/
\--struct_test/
\--vector_test/
\--.vimspector

调试操作

对应HUMAN模式的快捷键:

按键 映射 功能
F5 <Plug>VimspectorContinue 开始调试、下一个断点
F3 <Plug>VimspectorStop 停止调试
F4 <Plug>VimspectorRestart 使用相同的配置,重启debug
F6 <Plug>VimspectorPause 暂停调试对象
F9 <Plug>VimspectorToggleBreakpoint 添加、取消断点
<leader>F9 <Plug>VimspectorToggleConditionalBreakpoint 添加条件断点或日志点
F8 <Plug>VimspectorAddFunctionBreakpoint 为光标下的表达式添加函数断点
<leader>F8 <Plug>VimspectorRunToCursor 运行到光标处
F10 <Plug>VimspectorStepOver 单步跳过
F11 <Plug>VimspectorStepInto 单步进入
F12 <Plug>VimspectorStepOut 单步跳出

如果跑完一圈断点要重开,就按F4,其它的跟常用IDE差不多。
还有就是各个窗口,也和IDE差不多的功能,线程栈可以跳对应的线程和执行的代码位置。
变量监视窗口支持表达式,到窗口按i,就可以输入表达式如:i==50

rust-vimspector-debug窗口说明.jpg

差不多就能用了,有问题留言。

参考链接

https://github.com/puremourning/vimspector