如何将gdb与Vim集成?


52

取而代之的gdbtuictrl+xgdb其中显示了我想看到这在我的Vim编辑器将标签之间跳跃在屏幕上方的源代码,以及相应的缓冲区。

我怎样才能做到这一点?


仅供参考,我发现lldb插件@ github.com/gilligan/vim-lldb和屏幕快照看起来很有希望。
命名

顺便说一句,有人知道关于windbg吗?Vim集成本来是个好主意。虽然,实际上,我认为几乎所有软件都存在这种情况。
eyal karni

Answers:


33

在我尝试过的所有插件中,我发现ConqueGDB是最好的方法。ConqueGDB使用Conque Shell将交互式shell嵌入到vim中,供GDB使用。

ConqueGDB的工作流程包括不在GDB终端上输入GDB命令,而是使用vim源代码上的快捷方式。但是,如果需要,可以继续使用GDB提示符以获取更多高级命令,或者滚动查看整个调试会话。

一些ConqueGDB默认映射,例如:

  • leaderr : 跑
  • leaderc :继续
  • leaders : 步
  • leaderp :在光标下打印变量

请注意,vim光标行是如何用于发出GDB“打印行”的,当前代码执行在另一行(14)中,并且在第10行有一个断点。

与CongueGDB一起使用vim

例如,要使用Vundle进行安装:

Plugin 'vim-scripts/Conque-GDB'

我使用以下插件选项:

let g:ConqueTerm_Color = 2         " 1: strip color after 200 lines, 2: always with color
let g:ConqueTerm_CloseOnEnd = 1    " close conque when program ends running
let g:ConqueTerm_StartMessages = 0 " display warning messages if conqueTerm is configured incorrectly  

什么leader意思
2013年

@ In78表示大多数计算机上的<kbd> \ </ kbd>键。例如,<leader>r在我的计算机上是<kbd> \ </ kbd> + <kbd> r </ kbd>。Vim手册上有相应的条目::help leader
Parsa

不要忘记此ConqueGDB默认映射:<Leader>b。它在光标位置设置一个断点。但是,它不是切换按钮,因此您无法使用它再次将其删除。相反,您将必须在GDB提示符下写“ clear”。
serup

我尝试使用此ConqueGdb,为了使其正常工作,我首先指定了可执行文件-有时设置刹车点会失败-我必须聚焦gdb窗口并按I进行插入,然后才会出现断点-这是ConqueGdb正常吗?
serup

11

您有几个集成gdb的插件。

  • 我们曾经有pyclewn。在2.3版之后,该项目已终止。上一次提交是在2016年进行的。对于好奇的提交,github上仍然有一个镜像,其作者将其存档。注意:pyclewn曾经是其他Xavier Degaye的* clewn项目演变的最后一步。
  • vim-debugger,集成了其他几个调试器
  • notEvil的vim-debug,充当“ pyclewn克服某些缺点的便捷层”

还有一个集成了lldb的插件(来自LLVM项目)

由于新:terminal功能的出现,Bram似乎目前(2017年9月)正在vim内进行gdb的集成。要使用它,我们需要加载(带有)termdebug数据包:packadd termdebug,然后我们将能够在vim窗口中启动gdb控制台:TermDebug (+options)。IMO,我们可以认为这是Vim下GDB集成的未来。


4
很好-您能否简要介绍每个插件?
muru

1
?? 链接指向插件的官方页面。是的,如果插件消失或将其移到其他地方,它们可以更改。在那种情况下,我将像在SO上一样在第一种情况下更新消息。在第二种情况下,这将意味着不推荐任何详细描述插件功能的消息。更糟糕的情况是:详细说明插件的实际功能将在他们各自的作者进行工作,添加功能等时变得过时。随便 下周我将对它们进行简要说明...
卢克·赫米特

2
@LucHermitte该帖子出现在评论队列中;我自己没有添加此消息的确切文本,而是系统为我做了。无论如何,在SO和大多数(如果不是全部)SE站点上,仅链接答案被视为“错误”。不仅是因为它们可能会过时,而且还因为它们并没有真正解释问题。几乎可以通过链接到正确的文档页面来“回答”所有问题,地狱,您甚至可以链接到源代码,但这真的可以解释一些问题吗?这真的有用吗?这真的有助于某人对Vim的理解吗?
马丁·图尔诺伊

1
“我自己没有添加此消息的确切文本,系统为我做到了”。好。这解释了消息,我发现这很奇怪。关于链接。我了解有关RTFM / SFTW的SO / SE政策。与其他论坛不同,重复/重复问题在被检测到时将被关闭,因此SO / SE倾向于采用Wiki方法。
卢克·赫米特

3
关于在哪里可以找到插件。我可以复制他们的文档。但这无济于事。此外,随着插件的发展,几乎不可能保持最新的答案。可以添加功能的最新摘要,我将继续介绍。无论如何,他们的官方页面是入口。关于插件,这是第一个重要信息。确实,一个不错的演示文稿可能会吸引我们……直到我们发现该插件无法在我们的特殊情况下工作-这在FSOSS中经常发生。在这里,可用的解决方案列表也很有趣。
2015年

7

GDB edit命令

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

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

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

退出编辑器后,您将回到gdb

这使您可以自由浏览源代码,并且如果您具有ctags集成功能,则特别强大。

这是穷人内置的gdb与vim集成的内置方式:主要缺少的是从Vim设置断点。

edit 和中心

edit默认情况下,它不会将Vim放在源的中心,所以我创建了一个Python脚本来做到这一点:https : //stackoverflow.com/questions/43557405/how-to-open-the-current-file-at-the-来自gdb / 43557406#43557406的文本编辑器中的当前行

剪贴板助手的断点命令

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

b <file-path>:<line-number>

到剪贴板:

command! Xg :let @+ = 'b ' . expand('%:p') . ':' . line('.')

然后,您可以将其粘贴到中gdb

这是穷人的向gdb集成以简化设置断点的方法。

另请参阅:https : //stackoverflow.com/questions/3536600/do-you-debug-c-code-in-vim-how


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.