GDB 调试工具简明指南
GDB 调试工具简明指南
基本命令
- 启动调试:
gdb 可执行文件 - 运行程序:
run或r - 单步执行:
next(不进入函数)step(进入函数)finish(执行完当前函数并返回)- 继续运行:
continue或c - 打印变量:
print 变量名或p 变量名 - 查看和切换堆栈:
backtrace或bt(查看调用栈)frame 帧号(切换到指定栈帧)- 退出gdb:
quit或q
常用调试场景
1. 调试崩溃程序
gdb 可执行文件 core文件
bt # 查看崩溃时的调用栈
2. 查看内存
x/格式 地址
例如: x/10x 0x123456 # 查看16进制格式的10个字
3. 修改变量值
set var 变量名=值
4. 多线程调试
info threads # 查看线程
thread 线程号 # 切换线程
小技巧
- 使用
layout src可以显示源代码窗口 -tui选项启动图形界面模式
断点管理
- 设置断点:
break 函数名或b 函数名(在函数入口设置断点)break 文件名:行号(在指定文件的指定行设置断点)-
break *地址(在内存地址处设置断点) -
查看断点:
info breakpoints或i b(列出所有断点)-
info break 断点号(查看特定断点详情) -
删除断点:
delete 断点号或d 断点号(删除指定断点)delete(删除所有断点)clear 函数名(删除函数上的断点)-
clear 文件名:行号(删除指定位置的断点) -
禁用/启用断点:
disable 断点号(禁用断点)enable 断点号(启用断点)
Watchpoint 监控点
watch 变量名- 当变量被写入时中断rwatch 变量名- 当变量被读取时中断awatch 变量名- 当变量被读取或写入时中断
使用示例:
(gdb) watch my_var # 监控my_var变量的写入
(gdb) rwatch ptr # 监控ptr指针的读取
(gdb) awatch counter # 监控counter变量的读写
查看监控点:
info watchpoints或i wa(列出所有监控点)
删除监控点:
- 与断点相同, 使用
delete命令