linux gdb调试常用命令手册
摘要:GDB是Linux下强大的程序调试工具,提供启动程序、断点设置、变量查看等核心功能。常用命令分为5类:1)基础启动与退出(gdb/run/quit);2)断点与观察点操作(break/watch);3)代码单步执行(next/step);4)数据查看修改(print/set);5)辅助命令(help/shell)。这些命令配合使用可精准定位程序问题,提高调试效率。每个命令提供缩写和示例,如&
·
GDB 是 Linux 下主流的程序调试工具,能实现启动程序、设置断点、查看变量、跟踪代码等核心调试功能。以下按调试流程分类整理常用命令,包含缩写、用法和示例,方便日常查阅使用:
1. 基础启动与退出
这类命令用于开启调试、运行程序和退出调试环境,是调试的起点和终点。
| 命令(缩写) | 功能说明 | 示例 |
|---|---|---|
| gdb <程序名> | 启动 GDB 并加载指定可执行程序(需编译时加-g参数生成调试信息) |
gdb test(调试 test 程序) |
| run(r) | 运行调试的程序,可带参数传递给程序 | r 10 20(以 10 和 20 为参数运行程序) |
| set args <参数> | 为程序预设运行参数 | set args input.txt(预设程序读取 input.txt) |
| quit(q) | 退出 GDB 调试环境 | 直接输入q即可退出 |
| kill | 强制终止当前调试的程序,保留 GDB 环境 | 程序卡死时输入kill终止运行 |
2. 断点与观察点操作
断点用于让程序在指定位置暂停,观察点用于监控变量或表达式的变化,是调试核心操作。
| 命令(缩写) | 功能说明 | 示例 |
|---|---|---|
| break(b) | 在指定位置设置断点 | b 20(第 20 行设断点)、b main(main 函数入口设断点)、b test.c:15(test.c 第 15 行设断点)、b 30 if i==100(i 等于 100 时第 30 行断点触发) |
| tbreak | 设置临时断点,命中一次后自动删除 | tbreak init(init 函数临时断点) |
| info breakpoints(info b) | 查看所有断点信息,含编号、位置等 | info b(列出所有断点详情) |
| delete(d) | 删除断点,无参数时删除所有断点 | d 1(删除编号为 1 的断点) |
| disable/enable | 禁用 / 启用断点,断点信息不删除 | disable 2(禁用编号 2 的断点)、enable 2(重新启用) |
| watch | 设置观察点,变量值变化时暂停 | watch sum(监控 sum 变量的值变化) |
| rwatch | 变量被读取时程序暂停 | rwatch key(读取 key 变量时暂停) |
| awatch | 变量被读或写时程序暂停 | awatch count(读写 count 变量均暂停) |
3. 代码单步与流程控制
用于逐步执行代码,精准跟踪程序执行路径,定位代码逻辑问题。
| 命令(缩写) | 功能说明 | 示例 |
|---|---|---|
| next(n) | 单步执行,不进入函数调用 | n(逐行执行,跳过函数内部) |
| step(s) | 单步执行,进入函数调用(需有调试信息) | s(执行到函数调用时进入函数体) |
| stepi(si)/nexti(ni) | 单步执行机器指令,前者进入指令级函数 | si(查看汇编指令级的单步执行) |
| continue(c) | 从断点处继续运行,直到下一个断点或程序结束 | c(断点暂停后恢复运行) |
| finish | 执行完当前函数并返回,显示返回值 | 在函数内输入finish,直接执行到函数返回 |
| until(u) | 执行到当前循环结束或指定行 | u 50(直接运行到第 50 行) |
| return | 强制当前函数返回,可指定返回值 | return 0(让当前函数直接返回 0) |
4. 数据查看与修改
用于调试时查看变量、内存、类型等信息,也可动态修改变量值验证逻辑。
| 命令(缩写) | 功能说明 | 示例 |
|---|---|---|
| print(p) | 打印变量或表达式的值,支持指定格式 | p a+b(打印 a+b 结果)、p /x num(十六进制显示 num) |
| display | 程序每次暂停时自动显示指定变量 | display index(每次暂停都显示 index 的值) |
| undisplay | 删除自动显示设置 | undisplay 1(删除编号 1 的自动显示项) |
| list(l) | 显示源代码,默认每次 10 行 | l 30(显示第 30 行附近代码)、l func(显示 func 函数代码) |
| backtrace(bt) | 查看函数调用栈,明确执行路径 | bt(列出当前函数及上层调用函数的层级关系) |
| frame(f) | 切换函数调用栈帧 | f 1(切换到调用栈中编号 1 的函数) |
| info locals | 查看当前函数的所有局部变量 | 进入函数后输入info locals查看局部变量值 |
| info args | 查看当前函数的参数及对应值 | 在函数内输入info args查看参数信息 |
| whatis/ptype | 查看变量类型,后者显示复杂类型详情 | whatis struct data(查看结构体类型)、ptype data(显示结构体成员) |
| x | 查看指定地址的内存内容 | x/4xw $esp(查看 esp 寄存器起始的 4 个 4 字节内存,十六进制显示) |
| set | 修改变量值 | set count=5(将 count 变量改为 5) |
5. 其他辅助命令
| 命令(缩写) | 功能说明 | 示例 |
|---|---|---|
| disassemble(disas) | 查看函数的汇编指令 | disas main(显示 main 函数的汇编代码) |
| shell | 在 GDB 中执行 Linux shell 命令 | shell ls(列出当前目录文件) |
| help(h) | 查看命令帮助信息 | help watch(查看 watch 命令的用法) |
更多推荐

所有评论(0)