你在Vim中调试C++代码吗?怎么样?

And*_*vov 139 c++ debugging vim gdb

问题是所有使用Vim开发C++应用程序的人.

在我的生命中有一段时间,可以被描述为"我讨厌Vim !!!"......"Vim很好!"

然而,我已经习惯了那些F5- F11在调试代码,监视窗口,调用堆栈和主代码时都是快捷方式 - 所有这些都是可见的,而无需键入任何GDB命令.

所以,这是一个问题:

您是否也使用Vim进行调试?或者为此目的切换到某些IDE?哪一个?

对于那些使用Vim来调试代码的人:是否有插件在编辑器中设置断点,突出显示我们当前正在调试的行,步骤中的自动导航,步入,退出?

请不要告诉我你使用GDB作为命令行,只看到一行被调试,等等.

Unc*_*eiv 70

与其他答案相比,至少有三个选项可以满足您的需求:clewn,pyclewnvimgdb.

这三个项目都是相关的.vimgdb是针对Vim的补丁,需要重新编译Vim.clewn是一个独立程序,通过Netbeans套接字接口与Vim通信.这需要使用该+netbeans选项构建Vim (在最近的Linux发行版中就是这种情况,因此它应该不是问题).

引用clewn的网站:

Clewn在vim编辑器中实现了完整的gdb支持:断点,监视变量,gdb命令完成,程序集窗口等.

我想你一定要试一试.

pyclewn网站的主页显示了三个项目之间的比较.

几个月前我试过pyclewn.设置起来有点困难,但看起来很好但很有希望.我刚做了一些测试,你可以设置书签等,这是你期望从图形调试器中获得的常用内容.我最终没有出于偶然原因使用它,但我很想再试一次.

  • Conque GDB是一个不错的选择.易于安装,简单且功能强大. (6认同)
  • 只是为了添加一个基于 GDB 的 vim“like”调试器 - https://cgdb.github.io/ (2认同)

tin*_*ino 18

2020 年更新:有一个使用调试适配器协议的新插件vimspector

  1. 安装插件https://github.com/puremourning/vimspector#installation

  2. 配置(写入.vimspector.json

  3. 用调试符号编译 g++ cpp.cpp -ggdb -o cpp

  4. 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"
    }
  }
} }
Run Code Online (Sandbox Code Playgroud)


Joh*_*han 14

Vim是一个很好的编辑器,但是为了进行调试,我使用了一个调试器(比如GDB).

但是你不必在文本模式下使用GDB; 您可以使用像KDbg,DDDInsight这样的图形前端.

有很多方法可以将GDB变成Vim(但是你会得到基于文本的调试).


Dan*_* S. 11

Vim在2018年5月发布的8.1版中正式添加了一个内置调试器。早在2017年8月,该功能在某些8.0版中也已存在。

以下vim命令加载插件并启动调试器。

:packadd termdebug
:Termdebug
Run Code Online (Sandbox Code Playgroud)

后一个命令将程序作为可选参数,或者可以gdb使用该file命令从窗口加载程序。

加载插件后,gdb可以在相应的窗口中交互使用。例如,可以设置断点,可以单步执行代码,还可以检查变量。

可以发出Vim命令与进行交互gdb。一些相关的命令包括:Step:Over:Finish:Continue:Stop:Break:Clear,和:Evaluate

此外,编辑器窗口顶部还有可点击的按钮,可与进行交互gdb

编辑器窗口将更新以反映调试状态。断点用表示,>>当前行突出显示。

内置的帮助页面包含完整的文档。

:help terminal-debug
Run Code Online (Sandbox Code Playgroud)

我最近写了一篇博客文章,其中包括一个示例会话。

https://www.dannyadam.com/blog/2019/05/debugging-in-vim/


Cir*_*四事件 8

GDB edit命令

使用以下命令在当前行上打开编辑器:

$EDITOR +<current-line> <current-file>
Run Code Online (Sandbox Code Playgroud)

默认editorex,但vim也理解+<current-line>格式.

当你退出编辑器时,你会回来gdb.

这允许您自由地浏览源代码,如果您有ctags集成,则特别强大.

这是一个穷人内置的单向gdb到vim集成:主要缺少的是从Vim设置断点.

edit 和中心

edit默认情况下,Vim不会在源代码中居中,所以我创建了一个Python脚本来执行它:如何在GDB的文本编辑器中打开当前行的当前文件?

断点命令到剪贴板助手

此vim命令复制类型的断点说明符:

b <file-path>:<line-number>
Run Code Online (Sandbox Code Playgroud)

到剪贴板:

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')
Run Code Online (Sandbox Code Playgroud)

然后你可以将其粘贴到gdb.

这是一个穷人对gdb集成的vim,可以轻松设置断点.

GDB仪表板

https://github.com/cyrus-and/gdb-dashboard

这与Vim无关,但它是一个轻量级的解决方案,实现了很多,可能适合其他Vimmers.

其他人提到了GDB TUI,但我发现它太破碎了,而且现在强大到可以忍受.

所以我转而使用基于Python API的解决方案,例如GDB Dashboard.

我在下面更详细地描述了used和reasonale:带代码的gdb拆分视图

以下是它为您提供的屏幕截图:

在此输入图像描述

另请参阅:https://vi.stackexchange.com/questions/2046/how-can-i-integrate-gdb-with-vim