Vim最强调试插件:vimspector
最近看到了韦大在知乎的回答后,想去试用一下vimspector
,却发现vimspector
诞生两年了却没有介绍它的中文资料。我查阅官方文档遇到不少困难,在这里记录折腾出来的结果,与大家分享。
vimspector是一个基于DAP(debug adapter protocol)的Vim多语言调试插件,理论上能够支持所有支持DAP的语言。这个插件仍在实验阶段,可能会有各种bug,但是对C/C++、Python的支持已经进行了充分的测试,可以放心使用。
安装
使用vim-plug
安装:
Plug 'puremourning/vimspector'
安装完成后进入vimspector
的安装目录,执行:
./install_gadget.py <language-name>
install_gadget.py
会自动下载<language-name>
所需的调试适配器并进行相应配置,--help
可以查看vimspector
所支持的全部语言。
以在Linux环境上打开C/C++支持为例:
./install_gadget.py --enable-c
vimspector
会自动下载微软开发的调试适配器cpptools-linux.vsix
到your-vimspector-path/gadgets/linux/download/vscode-cpptools/0.27.0/
中。如果是在mac上,linux
会被改成mac
。
因为这个文件的下载地址可能无法在国内访问,可以使用VPN手动下载好放置在上面提到的目录中,然后再执行以上命令。
配置
vimspector
使用json作为配置文件的格式,每个配置都是一个json对象。
使用vimspector
时必须先写好配置文件,vimpector
有两类配置:
- 调试适配器的配置
- 如何启动或连接到调试适配器
- 如何attach到某进程
- 如何设置远程调试
- 调试会话的配置
- 使用哪个调试适配器
- launch或attach到进程
- 是否预先设置断点,在何处设置断点
这两类配置可以对应多个配置文件,vimspector
会将多个配置文件中的信息合并成一个配置。
调试适配器配置
调试适配器的这个配置在打开vimspector
对某语言的支持时就已经自动设置好了,存放在your-path-to-vimspector/gadgets/linux/.gadgets.json
中。
比如在我的设备上,.gadgets.json
内容如下:
{
"adapters": {
"vscode-cpptools": {
"attach": {
"pidProperty": "processId",
"pidSelect": "ask"
},
"command": [
"${gadgetDir}/vscode-cpptools/debugAdapters/OpenDebugAD7"
],
"name": "cppdbg"
}
}
}
其中变量${gadgetDir}
代表着存放.gadgets.json
的目录。除此之外,vimspector
还定义了其他预定义变量,并提供了自定义和用户输入变量内容的功能,以便我们编写比较通用的配置文件。
调试适配器的配置还可以存在于其他配置文件中,vimspector
读取一系列配置文件,生成adapters
对象。
调试适配器的配置可以存在于以下文件中:
your-path-to-vimspector/gadgets/<os>/.gadgets.json
:这个文件时vimspector
自动生成的。``your-path-to-vimspector/gadgets//.gadgets.d/*.json`:这个文件是用户自定义的。
在Vim打开的文件的父目录中递归搜索到的第一个
.gadgets.json
。.vimspector.json
中定义的adapters
。
编号代表配置文件的优先级,编号越大优先级越高,高优先级的配置文件将覆盖低优先级的配置文件中的的adapters
。
在我的机器上没有your-path-to-vimspector/gadgets/<os>/.gadgets.d
目录,可能是需要自己创建。
调试会话配置
项目的调试会话的文件位于以下两个位置:
<your-path-to-vimspector>/configurations/<os>/<filetype>/*.json
- 项目文件中的
.vimspector.json
每当打开一个新的调试会话时,vimspector
都会在当前目录向父目录递归搜索,如果查找到了.vimspector.json
,则使用其中的配置,并将其所在的目录设定为项目根目录;如果未查找到,则使用vimspector
安装目录中的配置文件,将打开的文件的目录设置为项目根目录。
奇怪的是,vimspector
文档中描述的全局配置所在的目录并不存在,当我自己创建相应的目录、文件后,vimspector
报告找不到调试设置。我不得已只能在每个项目根目录中创建单独的.vimsspector.json
。
配置选项
.vimspector.json
中只能包含一个对象,其中包含以下结构:
adapters
:调试适配器配置,不建议包含configurations
:调试程序时的配置
configurations
应该包含以下关键字:
adapter
:使用的调试配置器名称,该名称必须出现在adapters
块或其他调试适配器配置中。variables
:用户定义的变量configuration:调试器实际使用的配置
remote-request
,remote-cmdLine
:远程调试使用
configuration
必须包含以下两个关键字:
request
:调试的类型,lauch
或attach
type
:
除了以上的选项,还应该设置要调试的程序的路经、参数、环境变量、调试器等。
上面的选项构成了配置文件的主体框架,更详细的配置选项可以参考
变量
vimspector
为了增强配置的通用型,降低编写难度,比较丰富的变量。
预定义变量
自定义变量
可以在variable
中定义变量。
{
"configurations": {
"some-configuration": {
"variables": {
"gdbserver-version": {
"shell": [ "/path/to/my/scripts/get-gdbserver-version" ],
"env": {
"SOME_ENV_VAR": "Value used when running above command"
}
},
"some-other-variable": "some value"
}
}
}
}
其中gdbserver-version
和some-other-variable
都是用户定义的变量,可以像预定义变量一样使用。
可以调用外部命令,将外部命令的输出赋给变量。gdbserver-version
的值就是/path/to/my/scripts/get-gdbserver-version
的输出。
还可以在运行vimspector
时输入变量的值。最典型的运例子是程序参数的传递,vimspector
调试的程序的参数以数组的形式传递,在配置文件中将args
设置为一个在运行时用户输入的变量,就可以模拟命令行的效果。
用户输入值的变量用"*${variable-neme}
表示,比如以下配置:
"args": [ "*${CommandLineArgs}" ]
在运行时vimspector
会要求用户输入值,如果用户输入1
、2
、3
,args
就会被拓展成["1", "2", "3"]
传递给程序。
示例
调试vim
vimspector
文档中给出的调试vim的配置:
{
"configurations": {
"Vim - run a test": {
"adapter": "vscode-cpptools",
"configuration": {
"type": "cppdbg",
"request": "launch",
"program": "${workspaceRoot}/src/vim",
"args": [
"-f",
"-u", "unix.vim",
"-U", "NONE",
"--noplugin",
"--not-a-term",
"-S", "runtest.vim",
"${Test}.vim"
],
"cwd": "${workspaceRoot}/src/testdir",
"environment": [
{ "name": "VIMRUNTIME", "value": "${workspaceRoot}/runtime" }
],
"externalConsole": true,
"stopAtEntry": true,
"MIMode": "lldb",
"logging": {
"engineLogging": false
}
}
}
}
}
我的配置
定义了launch
和attach
两种类型,进入vimspector
后会提示选择类型。如果是launch
则提示输入参数,如果时attach
则提示输入PID。
{
"configurations": {
"cpp:launch": {
"adapter": "vscode-cpptools",
"configuration": {
"name": "cpp",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
// user input args
"args": ["*${ProgramArgs}"],
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": true,
"stopAtEntry": true,
"MIMode": "gdb",
"logging": {
"engineLogging": false
}
}
},
"cpp:attach": {
"adapter": "vscode-cpptools",
"configuration": {
"name": "cpp",
"type": "cppdbg",
"request": "attach",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"MIMode": "gdb"
}
}
}
}
运行截图:
选择2后:
使用
vimspector
预设了vscode mode和human mode两套键盘映射(快捷键)。
开启vscode mode:
let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
开启human mode:
let g:vimspector_enable_mappings = 'HUMAN'
也可以使用vimspector
提供的函数,自己定义映射。
参考:
详细的配置文档:https://puremourning.github.io/vimspector/configuration.html#debug-adapter-configuration
粗略的配置教程和示例: https://puremourning.github.io/vimspector-web/demo-setup.html#putting-it-together
github主页: https://github.com/puremourning/vimspector
详细的配置参数:https://puremourning.github.io/vimspector/schema/
Vim最强调试插件:vimspector的更多相关文章
- 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码
在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...
- 非常棒的Visual Studo调试插件:OzCode
非常棒的Visual Studo调试插件:OzCode 周银辉 视频介绍 http://channel9.msdn.com/Shows/Visual-Studio-Toolbox/OzCode 官方网 ...
- VS2012的调试插件Image Watch,opencv编程神器
今天配置 opencv3.0 时无意中看到 Image Watch 这样一个VS2012的调试插件,适用了下,特别好用. 部分链接: Image Watch 的 下载链接 OpenCV关于ImageW ...
- VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"
VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...
- 【转】Vim十大必备插件
[转]Vim十大必备插件 转自:http://my.oschina.net/zhoukuo/blog/336315 Taglist taglist是一个用于显示定位程序中各种符号的插件,例如宏定义.变 ...
- Vim 中文件目录浏览插件——NERD tree
说明 :vim的插件NERDTree用于使得vim窗口分左右窗口显示的用法说明.其中,左侧为目录的树形界面,简称为NERDTree界面,右则为vim界面. 一.配置步骤 下载地址: http://ww ...
- Windows 10环境安装VIM代码补全插件YouCompleteMe
Windows 10环境安装VIM代码补全插件YouCompleteMe 折腾一周也没搞定Windows下安装VIM代码补全插件YouCompleteMe,今天在家折腾一天总算搞定了.关键问题是在于P ...
- vim学习、各类插件配置与安装
vim学习.各类插件配置与安装 vim 插件 配置 1. vim学习 vim基础学习:根据网上流行基础文章<简明Vim练级攻略>,进阶书籍<vim实用技巧>.注:进阶书籍可以在 ...
- chrome浏览器的VUE调试插件Vue.js devtools
chrome浏览器的VUE调试插件Vue.js devtools 应用商店直接安装 安装成功后在VUE文件打开可以直接调试: 提示效果如下: F12进入调试状态即可: 安装中出现的问题: 插件安装 ...
随机推荐
- nginx的gzip压缩
随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术.经过gzi ...
- XmlAnalyzer1.00 源码
此工程用途:将xml同级属性/子节点按字母序排列重新输出. 源码下载: https://files.cnblogs.com/files/heyang78/XmlAnalyzer-20200526-1. ...
- hadoop不能互相访问和linux防火墙守护进程
前言——作为装过几次集群的菜鸟,对于hadoop集群的安装还是比较有心得的:只要配置文件够好,集群配置就非常容易,否则也容易出现莫名其妙的问题!总结了一份3台机器搭建较完好的集群的一份配置文件. 在我 ...
- h5内嵌微信小程序,调用微信支付功能
在小程序中不能使用之前在浏览器中配置的支付功能,只能调用小程序专属的api进行支付. 因为需要在现在实现的基础上,再添加在小程序中调用微信支付功能,所以我的思路是这样的 1.在点击支付按钮时,判断是不 ...
- shell 文件判断
文件判断参数 -e,文件是否存在 -f,文件存在且为普通文件 -d,文件存在且为文件夹 #!/bin/bash [ -e test.sh ] && echo "test.sh ...
- 利用预编译解决C/C++重复定义的错误 -2020.09.13
利用预编译解决C/C++重复定义的错误 -2020.09.13 我们现在有main.c和function.h两个文件 main.c #include <stdio.h> #include ...
- Java SPI详细的例子
先翻一个来自于Baeldung的介绍: 为了更通俗易懂我就没有直译,如果有不严谨的地方请大神指教. JavaSPI的定义 Java SPI defines four main components S ...
- Spring Boot 启动第一个页面(Spring二)
在前面的文章里我配置好了spring boot的环境,并选择STS开发工具 具体文章见:https://blog.csdn.net/qq_38175040/article/details/105481 ...
- 论文:Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering-阅读总结
Bottom-Up and Top-Down Attention for Image Captioning and Visual Question Answering-阅读总结 笔记不能简单的抄写文中 ...
- [LeetCode] 221. 最大正方形(DP)
题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...