如何用gdb/cgdb调试Vim终端程序?解决终端占用与断点失效问题
调试终端版Vim:同时交互GDB/CGDB与Vim的方法
解决终端抢占的核心方案
终端程序调试的痛点是GDB和被调试程序共用终端,解决思路要么让两者分用不同终端,要么利用工具的分屏切换功能。
方法1:GDB指定独立终端给Vim
- 打开第一个终端,启动GDB加载Vim:
VIMRUNTIME=runtime gdb ./build/bin/nvim - 打开第二个终端,执行
tty命令获取终端路径(输出类似/dev/pts/3) - 切回第一个终端的GDB,设置Vim用第二个终端运行:
set inferior-tty /dev/pts/3 - 启动Vim:
这时Vim会在第二个终端打开,第一个终端保留GDB交互。触发断点时自动切回GDB,继续运行后回到Vim终端。start my-file
方法2:CGDB分屏模式(更便捷)
CGDB自带上下分屏,上屏是GDB命令区,下屏是Vim运行区,只需注意焦点切换:
- 启动命令:
VIMRUNTIME=runtime cgdb --args ./build/bin/nvim my-file - 按
Ctrl+X切换焦点:- 焦点在上屏时输入调试命令(设断点、步进等)
- 焦点在下屏时操作Vim
- 断点没触发?先确认:
- 用
file ./build/bin/nvim检查是否带调试符号(输出含with debug_info才正常) - 断点设在确定性入口,比如
b main,再启动试试
- 用
方法3:正确附加进程
如果用附加方式,要赶在Vim进入主循环前操作:
- 启动Vim时加延迟:
VIMRUNTIME=runtime ./build/bin/nvim --cmd "sleep 10" my-file - 另一个终端拿进程ID:
pgrep nvim - 附加进程:
sudo cgdb -p <进程ID> - 设置断点后继续运行:
c
断点未触发的排查
- 修改代码后必须重新编译:
make clean && make CMAKE_BUILD_TYPE=Debug - 确认断点不在被优化掉的代码段(Debug模式默认关闭优化,手动加了优化参数要去掉)
- 用
info breakpoints查看断点状态,确保是启用状态
内容的提问来源于stack exchange,提问作者nullromo
相关产品推荐
相关产品推荐

