GDB TUI窗口管理

在使用GDB命令行调试程序时,命令输入、命令输出以及源码显示通常会混杂在同一个终端窗口中。尤其是使用list查看源码时,源码内容会和调试命令、打印结果交织在一起,阅读起来不够直观。

为了解决这个问题,GDB提供了TUI功能。TUI全称为Text User Interface,即文本用户界面。它可以在终端中将界面划分为多个窗口,例如源码窗口、汇编窗口、寄存器窗口和命令窗口,从而让调试过程更加清晰。

TUI是GDB原生支持的功能,通常只要安装的是完整版本的GDB,就可以直接使用。

一、常用窗口布局命令

GDB TUI中可以使用layout命令切换不同的窗口布局。

命令 作用
layout src 显示源码窗口
layout asm 显示汇编窗口
layout regs 显示寄存器窗口
layout split 同时显示源码窗口和汇编窗口
fs src/asm/reg 切换窗口焦点
i win 查看当前拥有焦点的窗口
layout next 切换到下一个布局
layout prev 切换到上一个布局
ctrl+x+a 退出窗口模式
接下来以一个实际的例子来演示这些命令的作用
#include <stdio.h>

int add(int a, int b)
{
    int sum = a + b;
    return sum;
}

int main()
{
    int x = 10;
    int y = 20;

    int result = add(x, y);

    printf("result = %d\n", result);

    return 0;
}

对源代码进行编译以及启动GDB调试后,进入调试界面,输入layout src打开TUI界面

可以看见上方为源码显示区域,下方为GDB的命令输入区域,上方被绿色的边框选中,说明当前的窗口焦点在上方,在这种状态下,使用方向键是调整的源码区域的内容。也可以使用i win查看当前的窗口焦点信息。如果想要使用方向键快捷使用gdb历史命令,需要先将窗口焦点切换到命令行窗口上fs cmd

使用b main命令在main函数处添加断点,执行r命令之后,可以看见程序在第11行处中断下来,前面的断点标识变为大写的B,说明该断点至少命中过了一次,对于在第14行添加的断点,可以看见程序还未运行到此处,所以目前断点标识为小写的b,断点标识后的+号标识当前断点为使能状态。

同时在源码窗口的下方,还会显示当前对应的程序状态。显示信息包括PC指针,当前运行线程,当前所在函数等信息。

使用layout split可以将当前的源码窗口分隔成两块部分

862

可以看见,中间部分出现了汇编代码的内容,使用layout asm可以将可视化窗口部分切换为汇编代码。

845

GDB的TUI模式可以把普通命令行调试变成多窗口调试界面,使源码、汇编、寄存器和命令输入区域分开显示,避免信息混杂在一起。常用的命令包括layout srclayout asmlayout regslayout split 等;如果需要在不同窗口之间切换操作焦点,可以使用focus或其简写fs;如果想退出TUI模式,可以使用Ctrl+x+a。对于需要频繁查看源码、寄存器和汇编的调试场景,TUI会比普通命令行模式更加直观。

posted @ 2026-06-28 09:48  ttkwzyttk  阅读(5)  评论(0)    收藏  举报