代码之家  ›  专栏  ›  技术社区  ›  Andrew_Lvov

在VIM中调试C++代码吗?怎么用?

  •  131
  • Andrew_Lvov  · 技术社区  · 14 年前

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

    我生命中有一段时期,可以说是 “我讨厌维姆!!!”维姆很好

    F5级 - 11层 调试代码、监视窗口、调用堆栈和主代码时的快捷方式—所有这些都是可见的,无需键入任何GDB命令。

    所以,问题是:

    您是否也使用Vim进行调试?或者你会为了这个目的而切换到IDE吗?哪一个?

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

    6 回复  |  直到 7 年前
        1
  •  77
  •   UncleZeiv    14 年前

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

    这三个项目都是相关的。 vimgdb公司 是针对Vim的补丁程序,需要重新编译Vim。 克莱恩 +netbeans 选项(在最近的Linux发行版中就是这种情况,所以这应该不是问题)。

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

    我想你一定要试一试。

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

    几个月前我试过pyclewn。这是一个有点困难的设置,但它看起来很好,虽然有希望。我只是做了一些测试,你可以设置书签等,这是你从图形调试器中所期望的。我最终没有使用它的偶然原因,但我渴望给它另一次尝试。

        2
  •  35
  •   dannyadam    5 年前

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

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

    :packadd termdebug
    :Termdebug
    

    后一个命令将程序作为可选参数,或者也可以从 gdb 窗口与 file

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

    可以发出Vim命令与 gdb公司 :Step , :Over , :Finish , :Continue :Stop , :Break , :Clear :Evaluate .

    此外,编辑器窗口顶部还有可单击的按钮,用于与 gdb公司 .

    >>

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

    :help terminal-debug
    

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

        3
  •  15
  •   Peter Mortensen icecrime    7 年前

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

    但是您不必在文本模式下使用GDB;您可以使用图形前端,如 KDbg , DDD Insight .

        4
  •  14
  •   Tinmarino    5 年前

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

    1. https://github.com/puremourning/vimspector#installation

    2. .vimspector.json )

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

    4. F4 启动调试

    enter image description here

    • 注意我的 .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"
        }
      }
    } }
    
        5
  •  12
  •   Ciro Santilli OurBigBook.com    4 年前

    GDB公司 edit

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

    $EDITOR +<current-line> <current-file>
    

    默认值 editor ex vim 也了解 +<current-line> 格式。

    当你离开编辑的时候,你又回到了工作中 gdb .

    这允许您自由地浏览源代码,如果您有足够的权限,它将特别强大 ctags 整合。

    和中心

    编辑 默认情况下,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公司 .

    这是一个穷人的vim到gdb的集成,以简化断点的设置。

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

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

    其他人提到了GDB-TUI,但我发现它太破碎了,不够强大,无法承受。

    所以我转而使用基于pythonapi的解决方案,比如GDB Dashboard。

    gdb split view with code

    以下是它给你的截图:

    enter image description here

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

    放弃使用真正的IDE

    https://www.slant.co/topics/1411/~best-ides-for-c-on-linux

        6
  •  4
  •   Brent Bradburn    14 年前

    所以对我来说, 使用恰好也是调试器的文本编辑器没有任何固有的优势 . 相反,我使用我喜欢的文本编辑器——独立于我选择使用的调试器。目前,我主要使用 kdbg公司 出于这些目的,但这些选择会随着时间的推移而独立演变。

        7
  •  1
  •   Shawn D.    14 年前

    最近我在一个应用程序上工作了很长时间,需要在它运行的盒子上放置一堆东西(设备设置),我用vim编写代码,有脚本自动构建,把它推到服务器上,在那里有一个脚本来注意与二进制文件一起推送的sentinel文件。然后,这将在box上重新启动相应的服务,在另一个ssh窗口中,我有一个 tail -f

    长话短说,我根本不用调试器。如果有什么东西意外地死掉了,我只需要提高日志记录级别,重做它,看看它死掉之前最后记录的东西是什么,然后分析它并解决问题。

    好的一点是,当客户环境中出现问题时,我只需要一个调试级别的日志就可以识别问题,甚至不需要访问他们的服务器。

    ... 但是,是的,有时候有一个调试器会很好。

        8
  •  1
  •   mirageglobe    6 年前

    :terminal
    

    并运行以下命令行(curses)调试器之一。一些默认情况下用于您不知道的ide。i、 e.lldb=xcode。

    显然还有更多基于cli的;@都可以随意建议并添加到列表中。谢谢!

        9
  •  0
  •   1of7    4 年前

    vim编辑器的答案都非常好。vim的无处不在使得它成为学习的好选择。 如果你打算和杰尼保持亲密关系,那就试试杰尼。它将提供类似的F5-F11编码。你可以微调它,使之尽可能接近你想要的。它还有一个可配置的监视窗口和终端输出。 与所有编辑一样,有一条学习曲线。尤其是处理插件/附加组件时。此外,还可以将所需的功能分配给在vim/gvim、emacs和geany中选择的键。