4、GDB TUI模式入门:TUI模式启动、TUI窗口布局、TUI快捷键、TUI模式配置
说实话,很多嵌入式工程师调试代码时,还在用最原始的方式——print大法满天飞。要么就是GDB命令行下一顿敲,list、break、next来回切,眼睛都快看花了。
我个人习惯用GDB的TUI模式。说白了,就是把GDB变成带界面的调试器。你想想看,左边看源码,右边敲命令,下面还能实时看汇编——这不比纯命令行舒服多了?
今天我们就来聊聊GDB TUI模式怎么玩。嗯,内容不多,但都是干货。
核心知识点速览
- TUI模式启动:三种方式,总有一种适合你
- 窗口布局:源码、汇编、寄存器、命令,想怎么摆就怎么摆
- 快捷键:不用鼠标也能飞
- 配置技巧:让TUI记住你的习惯
4.1 启动TUI模式
启动TUI模式有三种方式,我挨个说。
方式一:启动时直接进入TUI
最直接的方法,加个 -tui 参数就行:
gdb -tui ./my_program
我个人最常用这个。调试嵌入式程序时,我习惯先编译好,然后一条命令直接进TUI界面。
方式二:使用 gdbtui 命令
有些系统上,你可以直接用 gdbtui 替代 gdb:
gdbtui ./my_program
效果和上面一样。不过说实话,我很少这么用,因为不是所有平台都支持这个命令。
方式三:运行时切换
这个最实用。你已经在GDB命令行里了,突然想切到TUI模式?
(gdb) tui enable
或者用快捷键 C-x C-a(按住Ctrl再按x,然后按a)。想退出TUI?tui disable 或者再按一次 C-x C-a。
我的小技巧: 调试嵌入式裸机程序时,我经常先用命令行设好断点,再用 C-x C-a 切到TUI模式。这样能避免TUI模式下输入命令时的手忙脚乱。
4.2 TUI窗口布局
进入TUI模式后,你会看到几个窗口。默认情况下,上面是源码窗口,下面是命令窗口。
但GDB的TUI远不止这么简单。你可以用 layout 命令切换布局:
| 命令 | 布局说明 | 适用场景 |
|---|---|---|
layout src |
源码窗口 + 命令窗口 | 日常调试,看代码逻辑 |
layout asm |
汇编窗口 + 命令窗口 | 分析底层执行,看指令流水 |
layout split |
源码 + 汇编 + 命令(三窗口) | 需要对照源码和汇编时 |
layout regs |
寄存器窗口 + 当前布局 | 跟踪寄存器变化,调试中断/异常 |
layout next |
切换到下一个可用布局 | 懒得记命令时循环切换 |
举个例子,我在调试一个ARM Cortex-M的启动代码时,经常用 layout split。上面看C源码,中间看汇编,下面敲命令。这样能一眼看出编译器把C代码优化成了什么样子。
注意: 寄存器窗口(regs)会占用不少屏幕空间。如果你的终端窗口不够大,建议用 layout regs 之前先调大窗口,或者用 winheight 命令调整各窗口的高度。
4.3 TUI快捷键
嗯,快捷键这块,我刚开始用的时候也记不住。但用多了就发现,其实常用的就几个。
| 快捷键 | 功能 | 我的使用频率 |
|---|---|---|
C-x C-a |
切换TUI模式(开/关) | ⭐⭐⭐⭐⭐ |
C-x 1 |
只显示一个窗口(去掉源码/汇编) | ⭐⭐⭐ |
C-x 2 |
显示两个窗口(恢复默认) | ⭐⭐⭐ |
C-x s |
切换到单步执行模式(Step mode) | ⭐⭐⭐⭐ |
C-x o |
切换活动窗口 | ⭐⭐⭐⭐⭐ |
PgUp / PgDn |
源码窗口翻页 | ⭐⭐⭐⭐ |
上下箭头 |
在命令窗口浏览历史命令 | ⭐⭐⭐⭐⭐ |
我最常用的其实是 C-x o。为什么?因为有时候我想在源码窗口里上下翻看代码,但默认焦点在命令窗口。按一下 C-x o 把焦点切到源码窗口,就能用上下键翻页了。看完再切回来继续敲命令。
避坑指南: 我曾经在TUI模式下不小心按了 C-x C-a 退出了TUI,结果一脸懵。后来我养成了习惯:在 .gdbinit 里加上 set tui enable on,这样每次启动GDB都自动进TUI模式,省得手忙脚乱。
4.4 TUI模式配置
每次进TUI都要重新调布局?太麻烦了。我们可以把配置写进 .gdbinit 文件里。
这是我的个人配置,你可以参考:
# ~/.gdbinit 配置示例
# 自动启用TUI模式
set tui enable on
# 设置默认布局为 split(源码+汇编)
layout split
# 调整窗口高度:源码窗口15行,汇编窗口10行
winheight src 15
winheight asm 10
# 显示寄存器窗口
layout regs
# 设置反汇编风格为 Intel(如果你用x86)
set disassembly-flavor intel
# 开启TUI模式下鼠标支持(某些终端支持)
set tui mouse-events on
把这些写进 ~/.gdbinit 后,每次启动GDB,TUI模式就会自动按你的喜好布局。
重要提醒: .gdbinit 文件里的命令是按顺序执行的。所以如果你先 layout split 再 layout regs,最终效果是 split 布局加上寄存器窗口。如果你先 layout regs 再 layout split,寄存器窗口会被覆盖掉。顺序很重要!
另外,TUI模式下还有一些有用的设置:
set tui border-kind ascii— 用ASCII字符画边框,兼容性更好set tui border-kind space— 用空格画边框,更简洁set tui active-border-mode standout— 高亮当前活动窗口的边框show tui— 查看当前所有TUI相关的设置
我个人喜欢用 set tui border-kind space,因为有些终端对Unicode边框字符支持不好,显示出来是乱码。用空格虽然丑了点,但至少不会出错。
好了,TUI模式的基础就这些。说白了,启动、布局、快捷键、配置,四步走完,你就能在GDB里拥有一个半图形化的调试界面了。下次调试的时候试试看,你会发现回不去的——至少我是这样。
最后一个小建议: 刚开始用TUI时,别急着配一堆花里胡哨的东西。先学会 C-x C-a 切换、layout split 分屏、C-x o 切焦点,这三个用熟了,效率就已经起飞了。
可可精品资料库