You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用gdb/cgdb调试Vim终端程序?解决终端占用与断点失效问题

调试终端版Vim:同时交互GDB/CGDB与Vim的方法

解决终端抢占的核心方案

终端程序调试的痛点是GDB和被调试程序共用终端,解决思路要么让两者分用不同终端,要么利用工具的分屏切换功能。


方法1:GDB指定独立终端给Vim

  1. 打开第一个终端,启动GDB加载Vim:
    VIMRUNTIME=runtime gdb ./build/bin/nvim
    
  2. 打开第二个终端,执行tty命令获取终端路径(输出类似/dev/pts/3)
  3. 切回第一个终端的GDB,设置Vim用第二个终端运行:
    set inferior-tty /dev/pts/3
    
  4. 启动Vim:
    start my-file
    
    这时Vim会在第二个终端打开,第一个终端保留GDB交互。触发断点时自动切回GDB,继续运行后回到Vim终端。

方法2:CGDB分屏模式(更便捷)

CGDB自带上下分屏,上屏是GDB命令区,下屏是Vim运行区,只需注意焦点切换:

  1. 启动命令:
    VIMRUNTIME=runtime cgdb --args ./build/bin/nvim my-file
    
  2. 按Ctrl+X切换焦点:
    • 焦点在上屏时输入调试命令(设断点、步进等)
    • 焦点在下屏时操作Vim
  3. 断点没触发?先确认:
    • 用file ./build/bin/nvim检查是否带调试符号(输出含with debug_info才正常)
    • 断点设在确定性入口,比如b main,再启动试试

方法3:正确附加进程

如果用附加方式,要赶在Vim进入主循环前操作:

  1. 启动Vim时加延迟:
    VIMRUNTIME=runtime ./build/bin/nvim --cmd "sleep 10" my-file
    
  2. 另一个终端拿进程ID:
    pgrep nvim
    
  3. 附加进程:
    sudo cgdb -p <进程ID>
    
  4. 设置断点后继续运行:
    c
    

断点未触发的排查

  • 修改代码后必须重新编译:make clean && make CMAKE_BUILD_TYPE=Debug
  • 确认断点不在被优化掉的代码段(Debug模式默认关闭优化,手动加了优化参数要去掉)
  • 用info breakpoints查看断点状态,确保是启用状态

内容的提问来源于stack exchange,提问作者nullromo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:12:15