gdb(cgdb) 是一款用于测试携带调试信息的exe的软件,主要功能类似于windows平台中Visual Studio的debug模式
其中 cgdb 是有可视化的实时代码显示,两者的主要功能都是一致的
基本操作
gdb会自动记录最新的一条指令,直接按 回车键 可以快速执行上一条指令
编译
在编译程序时,加入调试信息
1
| gcc -g program.c -o program # -g 选项生成调试符号
|
进入gdb调试
./bin 代表的是上文中编译时带有调试信息的exe程序
退出调试
查看源码
list 也可以简写成 l
1 2 3 4
| list [行号] # 查看指定行附近的代码 list [文件名]:行号 # 查看指定文件的指定行 list [函数名] # 查看指定函数的代码 list # 继续显示后续代码(按回车键翻页)
|
按下 ESC 进入源代码窗口,查看源码,再按 i ,回到调试页面
断点操作
打断点
- 断点,只有打断点操作使用行号,其他所有断点相关操作均要用断点编号
1
| b [行号]/[函数名]/[函数名:行号]/[文件名:行号]
|
查看所有断点
删除断点
禁用和启用
可以同时禁用或启用多个断电,编号之间用空格隔开
1 2
| disable [断点编号] // 禁用断点 enable [断点编号] // 启用断点
|
设置条件
给已存在的断点设置条件
调试操作
运行至下一个断点
从头开始运行程序
逐过程
逐语句
查看函数栈
直接执行完当前函数
打印变量值或表达式
1
| p [变量名]/[表达式]/[指针]/[结构体/类 成员]/...
|
快捷执行
1 2
| until [指定行号] until foo // 执行到foo函数结束
|
查看上下文
查看上下文数据(相当于vs的监视)
每次程序中断(如断点、单步执行后),GDB 会自动显示已设置的变量值
取消指定变量的监视
1
| undisplay [变量名]/[表达式]/...
|
查看函数内所有变量
快速查看当前函数栈帧中所有局部变量
监视指定变量
监视指定变量是否有变化,产生一个hw断点(不会在运行时停止),用d删除
当被监控的值被修改时,GDB 会自动暂停程序
临时修改变量
调试期间临时修改变量值以确认错误原因
例子:
调试技巧