GDB
约 577 个字 21 行代码 预计阅读时间 2 分钟
1. 启动与退出¶
-
启动 GDB:
-
退出 GDB:
2. 设置断点¶
命令 | 说明 |
---|---|
b main | 在 main 函数处设置断点 |
b file.c:10 | 在 file.c 的第 10 行设断点 |
b *0x4005a7 | 在内存地址 0x4005a7 设断点 |
b func if x > 5 | 条件断点(当 x > 5 时触发) |
info breakpoints | 查看所有断点信息 |
delete <断点编号> | 删除指定断点 |
disable/enable <断点编号> | 禁用/启用断点 |
3. 执行控制¶
命令 | 说明 |
---|---|
r | 运行程序 |
c | 继续运行到下一个断点或程序结束 |
s | 单步进入(进入函数内部) |
n | 单步跳过(执行下一行,不进入函数) |
finish | 执行完当前函数并返回 |
until <行号> | 执行到指定行号 |
kill | 终止正在运行的程序 |
4. 查看变量与内存¶
命令 | 说明 |
---|---|
p x | 打印变量 x 的值 |
p/x x | 以十六进制格式打印 x |
p *(int*)0x7fffffffde44 | 查看内存地址的内容 |
info registers | 查看寄存器的值 |
x/10w 0x7fffffffde44 | 查看内存地址的 10 个 4 字节数据 |
watch x | 监视变量 x 的值变化(硬件断点) |
5. 堆栈与函数调用¶
命令 | 说明 |
---|---|
bt | 查看当前堆栈跟踪(backtrace) |
frame <帧编号> | 切换到指定堆栈帧 |
info args | 查看当前函数的参数 |
info locals | 查看当前函数的局部变量 |
up/down | 切换到上层/下层堆栈帧 |
6. 多线程调试¶
命令 | 说明 |
---|---|
info threads | 查看所有线程信息 |
thread <线程编号> | 切换到指定线程 |
b file.c:10 thread 2 | 在指定线程设置断点 |
set scheduler-locking on | 锁定其他线程(仅调试当前线程) |
7. 高级功能¶
命令 | 说明 |
---|---|
disassemble | 反汇编当前函数 |
set var x=5 | 修改变量 x 的值为 5 |
define hook-stop | 定义每次断点触发时的钩子命令 |
source script.gdb | 加载并执行 GDB 脚本 |
tui enable | 启用图形化界面(分屏模式) |
8. 调试崩溃程序¶
-
生成核心转储文件(Linux):
-
查看崩溃位置:
9. 常用快捷键¶
Ctrl + C
:中断程序运行。Enter
:重复上一条命令。Tab
:自动补全命令或文件名。
示例场景¶
调试段错误(Segmentation Fault): 1. 启动调试:
2. 运行程序: 3. 程序崩溃后查看堆栈: 4. 分析崩溃位置的变量: