GDB(GNU Debugger)是Linux下功能强大的程序调试工具,主要用于调试C/C++程序。以下是GDB的主要使用方法:
编译程序时加入调试信息
gcc -g program.c -o program
-g选项会在可执行文件中加入调试信息
启动GDB
gdb program
常用命令
| 命令 | 简写 | 功能 |
|---|---|---|
run |
r |
开始运行程序 |
break |
b |
设置断点 |
continue |
c |
继续执行到下一个断点 |
next |
n |
单步执行(不进入函数) |
step |
s |
单步执行(进入函数) |
print |
p |
打印变量值 |
backtrace |
bt |
查看调用栈 |
quit |
q |
退出GDB |
设置断点
b main # 在main函数入口设置断点
b 10 # 在第10行设置断点
b file.c:15 # 在file.c的第15行设置断点
b func_name # 在指定函数处设置断点
查看断点
info breakpoints
删除断点
delete 1 # 删除编号为1的断点
delete # 删除所有断点
查看变量
p variable # 打印变量值
p *ptr # 打印指针指向的值
p array[3] # 打印数组元素
修改变量
set var i=5 # 将变量i的值设为5
查看内存
x/10xw &var # 以16进制查看var开始的10个字(4字节)
格式:x/[数量][格式][单位] 地址
多线程调试
info threads # 查看所有线程
thread 2 # 切换到2号线程
条件断点
b 15 if i==5 # 当i等于5时在第15行中断
观察点
watch var # 当var被修改时中断
捕获异常
catch throw # 捕获所有抛出的异常
调试运行中的进程
gdb -p PID # 附加到正在运行的进程
显示源代码
list # 显示当前行附近的源代码
list 20 # 显示第20行附近的源代码
设置命令参数
set args arg1 arg2 # 设置程序运行参数
记录调试会话
set logging on # 开始记录到gdb.txt
自定义命令
define mycmd
> p var1
> p var2
> end
GDB也有图形界面前端:
- TUI模式:gdb -tui 或 Ctrl+X+A 切换
- cgdb:更强大的GDB前端
- DDD:数据可视化调试器
掌握这些基本命令后,你就可以高效地使用GDB进行程序调试了。