问题是所有使用Vim开发C ++应用程序的人。
我生命中有一段时期,可以说是 “我讨厌Vim !!!'..'Vim很好!'
然而,在大多数使用Microsoft开发IDE的时候,我已经习惯了调试代码,监视窗口,调用堆栈和调试代码时的那些 F5 - F11 快捷方式主要代码 - 所有可见,无需键入任何GDB命令。
所以,问题是:
您是否也使用Vim进行调试?或者为此目的切换到某些IDE?哪一个?
对于那些使用Vim调试代码的人:是否有插件在编辑器中设置断点,突出显示我们当前正在调试的行,步骤中的自动导航,步入,退出?
请不要告诉我你使用GDB作为命令行,只看到一行被调试等等。
答案 0 :(得分:69)
与其他答案相比,至少有三个选项可以满足您的需求:clewn,pyclewn和vimgdb。
这三个项目都是相关的。 vimgdb 是针对Vim的补丁,需要重新编译Vim。 clewn 是一个独立的程序,通过Netbeans套接字接口与Vim通信。这需要使用+netbeans
选项构建Vim(在最近的Linux发行版中就是这种情况,因此它应该不是问题)。
引用clewn的网站:
Clewn在vim编辑器中实现了完整的gdb支持:断点,监视变量,gdb命令完成,程序集窗口等。
我认为你一定要试一试。
pyclewn网站的主页显示了三个项目之间的比较。
几个月前我试过pyclewn。设置起来有点困难,但看起来很好但很有希望。我刚做了一些测试,你可以设置书签等,这是你期望从图形调试器中获得的常用内容。我最终没有出于偶然原因使用它,但我很想再试一次。
答案 1 :(得分:14)
Vim是一个不错的编辑器,但是为了进行调试,我使用调试器(如GDB)。
但您不必在文本模式下使用GDB;您可以使用KDbg,DDD或Insight等图形前端。
有很多方法可以让GDB进入Vim(但是你会得到基于文本的调试)。
答案 2 :(得分:9)
2020年更新:有一个使用调试适配器协议的新插件vimspector
配置(写.vimspector.json
)
使用调试符号g++ cpp.cpp -ggdb -o cpp
按F4
开始调试
.vimspector.json
在主目录中(因此可以在任何子目录中工作){
"configurations": {
"Python - Launch": {
"adapter": "vscode-python",
"configuration": {
"name": "Python: Launch current file",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"stopAtEntry": true,
"console": "externalTerminal",
"debugOptions": [],
"cwd": "${cwd}",
"program": "${file}"
}
},
"Perl - Launch": {
"adapter": "vscode-perl-debug",
"configuration": {
"name": "Perl: Launch current file",
"type": "perl",
"request": "launch",
"exec": "/usr/bin/env perl",
"execArgs": [],
"stopOnEntry": true,
"stopAtEntry": true,
"console": "externalTerminal",
"sessions": "single",
"debugOptions": [],
"cwd": "${cwd}",
"program": "${file}"
}
},
"C - Launch": {
"adapter": "vscode-cpptools",
"configuration": {
"name": "Cpp: Launch current file",
"type": "cppdbg",
"request": "launch",
"externalConsole": true,
"logging": {
"engineLogging": true
},
"stopOnEntry": true,
"stopAtEntry": true,
"debugOptions": [],
"MIMode": "gdb",
"cwd": "${cwd}",
"program": "${fileDirname}/${fileBasenameNoExtension}"
}
},
"Java - Launch": {
"adapter": "vscode-java",
"configuration": {
"name": "Java: Launch current file",
"request": "launch",
"mainClass": "com.vimspector.test.TestApplication",
"sourcePaths": [ "${workspaceRoot}/src/main/java" ],
"classPaths": [ "${workspaceRoot}/target/classes" ],
"args": "hello world!",
"stopOnEntry": true,
"console": "integratedTerminal"
}
}
} }
答案 3 :(得分:8)
GDB edit
命令
使用以下命令在当前行上打开编辑器:
$EDITOR +<current-line> <current-file>
默认editor
为ex
,但vim
也了解+<current-line>
格式。
当您退出编辑器时,您将返回gdb
。
这允许您自由浏览源代码,如果您进行ctags
集成,则特别强大。
这是一个穷人内置的单向gdb进行vim集成:主要缺少的是从Vim设置断点。
edit
和中心
edit
并未将Vim置于源代码中心,因此我创建了一个Python脚本来执行此操作:How to open the current file at the current line in a text editor from GDB?
对剪贴板助手的断点命令
此vim命令复制类型为
的断点说明符b <file-path>:<line-number>
到剪贴板:
command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')
然后您可以将其粘贴到gdb
。
这是一个穷人的vdb集成,可以轻松设置断点。
GDB信息中心
https://github.com/cyrus-and/gdb-dashboard
这与Vim无关,但它是一个轻量级的解决方案,可以实现很多并且可能适合其他Vimmers。
其他人提到了GDB TUI,但我发现它太破碎了,而且不够强大,无法忍受。
所以我转而使用基于Python API的解决方案,例如GDB Dashboard。
中更详细地描述了使用和理由以下是它为您提供的屏幕截图:
另请参阅:https://vi.stackexchange.com/questions/2046/how-can-i-integrate-gdb-with-vim
答案 4 :(得分:4)
使用源代码级调试器只是诊断错误程序行为的众多方法之一,我很少发现自己启动了一个 - 尽管这很容易做到。
所以对我来说,使用恰好也是调试器的文本编辑器根本没有任何固有的优势。相反,我使用我喜欢的文本编辑器 - 独立于我选择使用的调试器。目前,我主要使用 gedit 和 kdbg 来实现这些目的,但这些选择会随着时间的推移而独立发展。
答案 5 :(得分:2)
Vim于2018年5月发布的8.1版中正式添加了一个内置调试器。该功能早在2017年8月也已在某些8.0版中提供。
以下vim命令加载插件并启动调试器。
:packadd termdebug
:Termdebug
后一个命令将程序作为可选参数,或者可以使用gdb
命令从file
窗口加载程序。
加载插件后,gdb
可以在相应的窗口中交互使用。例如,可以设置断点,可以单步执行代码,并可以检查变量。
可以发出Vim命令来与gdb
进行交互。一些相关的命令包括:Step
,:Over
,:Finish
,:Continue
,:Stop
,:Break
,:Clear
和{{1 }}。
此外,编辑器窗口顶部还有可单击的按钮,用于与:Evaluate
进行交互。
将更新编辑器窗口以反映调试状态。断点用gdb
表示,当前行突出显示。
内置的帮助页面包括详尽的文档。
>>
我最近写了一篇博文,介绍了一个示例会话。
答案 6 :(得分:1)
刚刚在应用程序上工作了很长时间,需要在它运行的盒子上放置一些东西(设备设置),我在vim中编写代码,有自动构建的脚本,推动它到服务器,在那里有一个脚本,注意与二进制文件一起推送的sentinel文件。然后,这将重新启动该框上的相应服务,并在另一个ssh窗口中,我的日志文件上运行了tail -f
。
长话短说,我根本没有使用调试器。如果我意外地死了一些东西,我只是提高记录级别,重做它,看看在它死之前记录的最后一件事,然后分析并解决问题。
好消息是,当客户环境中存在问题时,我只需要一个调试级别的日志,并且可以在不需要访问其服务器的情况下识别问题。
...但是,有时候有一个调试器会很好。
答案 7 :(得分:0)
只需添加到上面:
IMO vim往往是一个轻量级的编辑器,调试往往会增加负担。有很多方法可以做到,即在
上使用vim7.4 +:terminal
并运行以下命令行(curses)调试器之一。缺省情况下,有一些不知道的IDE使用。即lldb = xcode。
显然,基于cli的更多; @all随时建议并添加到列表中。谢谢!
答案 8 :(得分:0)
vim编辑器的答案都很出色。 vim的普及使它成为学习的好选择。 如果您打算靠近VS,请尝试geany。它将提供类似的F5-F11编码。您可以对其进行微调,使其与您希望的接近。它还具有可配置的监视窗口和终端输出。 与所有编辑一样,这是一个学习曲线。特别是在处理插件/附加组件时。另外,可以将所需的功能分配给在vim / gvim,emacs,geany中选择的键。