Clewn、vimGdb 与 pyclewn:在 Vim 中集成 GDB 调试的方式与限制

Clewn 是一个让 Vim 获得完整 GDB 调试支持的程序,提供断点、监视变量、GDB 命令补全、汇编窗口等功能。它通过 netBeans socket 接口控制 Vim,与 Vim 并发运行并通信。关键限制是:Clewn 只能配合 gvim(Vim 的图形版本)使用,因为终端里的 Vim 不支持 netBeans 接口。如果你在纯终端环境工作,或者不想为每个 Vim 版本重新打补丁,就需要考虑 vimGdb 或 pyclewn 这两条替代路径。

三种方案的核心差异

Clewn 项目本身提供了两条实现路径(Clewn 和 vimGdb),并指向第三条路径 pyclewn。三者的定位如下:

方案 实现方式 运行环境要求 主要代价
Clewn 独立进程,通过 netBeans socket 控制 Vim 只能用于 gvim,需要自己的终端 终端版 Vim 不可用
vimGdb Vim 可选特性形式的补丁 不强制图形版,无需独立终端 每个新 Vim 版本都要重新打补丁
pyclewn Python 程序 与 Vim 集成更紧密 功能比 Clewn 和 vimGdb 更多,需另行查看其对比表

Clewn 和 vimGdb 共用同一套与 GDB 对接的基础源码,因此功能集基本相同,差异集中在运行方式和少数独有能力上。

Clewn 的独有能力

两者功能集共享,但 Clewn 支持一些 vimGdb 没有的特性:

  • 气球提示显示 GDB 表达式值:在图形界面中悬停即可查看表达式求值结果。
  • run 命令的输入输出走 Clewn 终端:GDB 的 run 命令直接在 Clewn 自己的终端里完成输入输出。

对应地,vimGdb 用户要控制被调试程序的输入输出,必须借助 GDB 的 tty 或 attach 命令。这是选择时容易被忽略的一点:如果你的调试流程依赖程序标准输入输出交互,Clewn 的体验更直接。

怎么选

按以下条件判断即可:

  • 只用 gvim,且能接受多开一个终端 → 选 Clewn。你还能获得气球提示和更顺手的 run 输入输出。
  • 需要在终端 Vim 中调试,或不想多一个终端窗口 → 选 vimGdb,但要接受每次升级 Vim 都要重新打补丁的维护成本。
  • 想要更多功能、与 Vim 集成更紧密 → 看 pyclewn。项目页面明确说明 pyclewn 功能多于 Clewn 和 vimGdb,并提供一张列出三者差异的表格,选型前建议直接查阅该表。

已知问题与版本提示

从发布记录看,有几个实际使用中值得注意的点:

  • Clewn 1.15(2009 年 11 月 28 日)修复了在 Ubuntu 9.10 上启动挂起的问题。
  • 当 netBeans socket 连接未建立、Clewn 打印 “not connected yet” 提示时,它会提示 Vim 可能没有以 netbeans_intg 编译。这是排查连接失败的第一检查项。
  • Clewn 1.13 将 restart 命令改名为 cl_restart;同时修复了源码以绝对路径编译后被移动时找不到源文件的问题,以及 Clewn 干扰 GDB pretty printing 的问题。
  • vimGdb 1.14 完成了向 Vim 7.2 的移植,并移除了 Mac OS X 上 vimgdb 控制台中的 ^M 字符。
  • vimGdb 1.13 是针对 Cygwin 平台的修复:Cygwin libc 不含 GNU libc 的 obstack,而 vimgdb 内嵌的 obstack 源码依赖其中缺失的头文件。

这些记录说明两件事:Clewn 的坑多集中在 socket 连接和 GDB 输出交互上;vimGdb 的坑多集中在平台差异和 Vim 版本适配上。

clewn.sourceforge.net