Vim 调试:termdebug 入门

简介

termdebug 是从 Vim 8.1 开始内置的调试插件,仅支持 GDB。

安装

  • 将 Vim 升级至 8.1 或以上版本。
  • GDB 需升级至 7.12 或以上版本。

启动

默认情况下需手动加载 termdebug 插件:

:packadd termdebug

假设我们有一个简单的 helloworld.cpp 文件:

#include <iostream>

using namespace std;

int main() {
    cout << "hello world" << endl;
    int in;
    cin >> in;
    cout << "you input " << in << endl;
    return 0;

我们将其编译为二进制文件 helloworld

g++ -g helloworld.cpp -o helloworld  # 必须有 -g,这样才能将调试的相关信息添加到.o文件中

现在,我们在 Vim 中启动 termdebug 来调试这个程序:

:Termdebug helloworld

这时 termdebug 会为我们开三个窗口。 其中, GDB 窗口提供 GDB 原生操作;程序窗口供被调试程序使用,提供 IO 功能源码窗口提供源码交互

可以通过<Ctrl-w>按键切换不同窗口。

调试程序

我们既可以在 GDB 窗口中调试,也可以在源码窗口中调试。 GDB 调试常用指令:

 1. file bin   加载名为 bin 的二进制文件 
 2. CTRL-C     中断程序
 3. run/r      运行
 4. next/n     执行当前行,停在下一行 (step over)
 5. step/s     执行当前行,进入下一层函数 (step in)
 6. finish     执行直至离开当前函数
 7. where      显示栈
 8. continue/c 继续执行
 9. break/b N  在第 N 行加断点
 10. break/b f  在函数 f 处加断点
 11. delete     删除所有断点

在源码窗口中的调试指令:

 :Run [args]        运行程序,可带参数 [args],或沿用上一次运行的参数
 :Arguments {args}  设置下一次运行所用参数

 :Break     在当前行加断点
 :Clear     删除当前行的一个断点

 :Step      = gdb "step" 
 :Over      = gdb "next"
 :Finish    = gdb "finish"
 :Continue  = gdb "continue"
 :Stop      中断程序

如果觉得手动输入调试指令太麻烦,可以在个人的.vimrc文件中自定义keymap来执行这些命令,如用<F9>来添加断点:

nnoremap <F9> :Break<CR>

现在我们来演示一下调试上面的已经加载好的 helloworld 程序:

  1. 先移动至 GDB 窗口,输入 b main 以在 main 函数入口处添加断点;
  2. 在 GDB 窗口输入r,程序开始运行,并停在 main 函数入口;
  3. 在 GDB 窗口输入 n,程序停在cout << "hello world" << endl;这一行;
  4. 移动至源码窗口,输入 :Continue,程序继续运行,并在 cin >> in 处等待用户输入;
  5. 移动至程序窗口(IO窗口),输入数字 3 并回车,可以看到程序输出 you input 3,并运行直至结束;
  6. 移动至 GDB 窗口,输入q,退出调试。

获取帮助文档

在 Vim 窗口中输入:h terminal-debug 阅读详细的帮助文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值