1、常用命令
回车键:重复上一命令
命令 | 简写 | 说明 |
help | h | 查看命令帮助 |
run | r | 重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件) |
start | 单步执行,运行程序,停在第一执行语句 | |
list | l | 查看原代码(list-n,从第n行开始查看代码。list+ 函数名:查看具体函数) |
set | 设置变量的值 | |
next | n | 单步调试(逐过程,函数直接执行) |
step | 单步调试(逐语句:跳入自定义函数内部执行) | |
backtrace | bt | 查看函数的调用的栈帧和层级关系 |
frame | f | 切换函数的栈帧 |
info | i | 查看函数内部局部变量的数值 |
finish | 结束当前函数,返回到函数调用点 | |
continue | c | 继续运行 |
p | 打印值及地址 | |
quit | q | 退出gdb |
break+num | b | 在第num行设置断点 |
info breakpoints | 查看当前设置的所有断点 | |
delete breakpoints num | d | 删除第num个断点 |
display | 追踪查看具体变量值 | |
undisplay | 取消追踪观察变量 | |
watch | 被设置观察点的变量发生修改时,打印显示 | |
i watch | 显示观察点 | |
enable breakpoints | 启用断点 | |
disable breakpoints | 禁用断点 | |
x | 查看内存x/20xw 显示20个单元,16进制,4字节每单元 | |
run argv[1] argv[2] | 调试时命令行传参 | |
enable breakpoints | 启用断点 | |
set follow-fork-mode_child | #Makefile开启core,当程序出错会自动生成core文件 |
2、简单调试举例
使用如下代码:
2.1 编译
通过加或不加 -g 编译两个版本。
可以看出,加上-g的可调试版本从文件大小上,明显更大一些,包含了根多的内容。
2.2 进入和退出调试
分别使用gdb xxx,对两个可执行文件分别调试,看看差别,并使用quit(q)退出调试
可以看到,不加-g编译出的文件是不可以调试的。
2.3 简单调试示例
2.3.1 添加断点( break / b)
gdb sum_with_g
分别给第14行和第19行加上断点
break 14
# 简写为b
b 19
2.3.2 查看所有断点(info breakpoints)
2.3.3 运行并命中断点(run / r)
2.3.4 查看(打印)变量(print / p)
2.3.5 追踪变量,继续运行查看(display )
2.3.6 保存断点到文件
save breakpoints dconfig.dp
保存后推出调试
2.3.7 加载断点文件进行调试
gdb sum_with_g -x dconfig.dp
重新进入调试后看到已经应用了断点文件
基本操作上就这些了。