前言GDBGNU Debugger是 Linux/Unix 系统下功能最强大的命令行调试工具尤其适合 C/C 程序的调试。本文将从编译调试程序开始逐步介绍 GDB 的常用命令、TUI 图形界面、汇编级调试、变量操作以及自动化脚本编写等实战技巧帮助开发者提升调试效率。一、编译可调试程序使用-g选项编译程序生成包含调试信息的可执行文件gcc-gtest.c-otest-g选项会在可执行文件中嵌入源代码行号、变量类型、函数名等调试信息这是 GDB 能够进行源码级调试的前提。二、TUI 模式与焦点切换1. 进入 TUI 模式GDB 的 TUIText User Interface模式提供了分屏显示可以同时查看源代码、汇编代码和寄存器状态。gdb-tui./test或启动后进入(gdb)tuienable2. 焦点切换快捷键CtrlXA退出 TUI 模式或焦点模式进入 focus 模式(gdb)focus在 TUI 模式下focus命令可以让焦点在不同窗口源码、汇编、寄存器等间切换。3. 重新加载程序调试过程中重新加载可执行文件(gdb)load三、汇编级调试1. 显示汇编窗口(gdb)layout asm该命令会在 TUI 模式下打开汇编代码窗口实时显示当前执行的汇编指令。2. 显示寄存器窗口(gdb)layout regs同时显示汇编代码和寄存器状态适合底层调试。3. 查看程序入口地址(gdb)info files显示可执行文件的段信息包括文本段代码的起始地址和大小。4. 查看函数信息(gdb)info functions列出程序中所有函数名及其地址。四、执行控制1. 单步执行不进入函数(gdb)nnext命令的简写执行下一行源代码但不会进入被调用的函数内部。2. 单步执行进入函数(gdb)sstep命令的简写执行下一行源代码如果该行是函数调用则进入该函数内部。3. 汇编级跳转在汇编调试时可以强制修改程序计数器PC实现跳转(gdb)setvar$pc0x60000ec8(gdb)n第一行将 PC 寄存器设置为指定地址第二行执行该地址的指令。五、断点管理1. 删除断点(gdb)delete1删除编号为 1 的断点。使用info breakpoints可以查看所有断点及其编号。图示GDB TUI 模式下的分屏调试界面同时显示源代码、汇编和寄存器状态。六、变量操作1. 自定义变量GDB 允许创建临时变量用于计算或存储中间结果(gdb)setvar$huang1(gdb)p$huang$40x1$huang是用户自定义变量pprint命令显示其值。2. 显示变量值一次性查看(gdb)p dtop_ana-fs_pmu_reg_cfg52._b.force_aon_ldo_bias_ctrl_s2a $60x0自动显示(gdb)display dtop_ana-fs_pmu_reg_cfg52._b.force_aon_ldo_bias_ctrl_s2a5:dtop_ana-fs_pmu_reg_cfg52._b.force_aon_ldo_bias_ctrl_s2a0x0display命令会在每次程序暂停时自动显示指定表达式的值。3. 管理 display 列表(gdb)info display查看所有通过display设置的自动显示表达式及其编号。七、GDB 脚本自动化GDB 支持脚本自动化可以批量执行调试命令特别适合重复性调试任务。1. 创建脚本文件创建test.gdb或test.sh文件名随意添加 GDB 命令printf\nprintfdtop_ana-fs_pmu_reg_cfg34._b.meter_atb_p_sel: 0x%x\n,dtop_ana-fs_pmu_reg_cfg34._b.meter_atb_p_sel printfdtop_ana-fs_pmu_reg_cfg34._b.meter_atb_n_sel: 0x%x\n,dtop_ana-fs_pmu_reg_cfg34._b.meter_atb_n_sel printf\n2. 执行脚本在 GDB 中加载并执行脚本(gdb)sourcetest.sh3. 脚本应用场景批量检查寄存器或内存值自动化测试用例执行复杂断点条件设置性能分析数据收集八、调试技巧总结编译必加-g没有调试信息GDB 只能进行汇编级调试。善用 TUIlayout asm和layout regs大幅提升汇编调试效率。变量跟踪display自动显示关键变量info display管理显示列表。脚本化调试重复性任务用脚本自动化减少手动操作。灵活跳转set var $pc可以在汇编级实现指令跳转用于绕过某些代码段。