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 退出窗口模式
接下来以一个实际的例子来演示这些命令的作用
c 复制代码
#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可以将当前的源码窗口分隔成两块部分

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

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

相关推荐
ttkwzyttk21 小时前
GDB观察点与捕获点使用
gdb
ttkwzyttk6 天前
GDB函数调用栈管理
gdb
ttkwzyttk7 天前
GDB调试变量、内存与寄存器查看与修改
gdb
ttkwzyttk8 天前
GDB调试简介与调试配置
gdb
modelmd20 天前
GDB 摘要
gdb
源分享22 天前
GDB下载和安装保姆级教程
gdb
modelmd1 个月前
翻译 GDB 官方文档
gdb
kidwjb1 个月前
一次多进程信号量同步失效的排查实录
gdb·进程通信·信号量
炘爚1 个月前
C++11实现线程池:项目实现过程的报错与gdb调试
stl·gdb·shared_ptr