使用前提
gcc生成的可执行程序默认是release版本的,要调式,必须是debug版本,要生成debug版本要加-g 选项
进入gdb调式工具
gdb +可执行程序
退出gdb
在命令行输入“quit”
显示行号
第一次输入l或者list:由gdb决定在哪开始显示行号(大概率在main函数附近,显示10行),之后的每次 l 会在上一次的基础上增加显示10行
l +行号:从这行开始显示行号
l +函数名:从这个函数附近开始显示行号
执行程序
执行程序使用 ‘run’ 的命令(可以简写成 r),直接run的没有什么意义(跟直接执行程序没区别,即是 ./mytest ),一般搭配断点使用
断点的相关操作
b/break
b +行号:在某一行设置断点
b +函数名:在在某个函数开头设置断点
之后我们在run,程序就会从这个断点停下来
info b
info b:查看断点信息
step/s
step或者s:逐语句(相当于vs中的F11,会进入函数)
next /n
n:逐过程(相当于vs中的F10,不会进入函数)
display
display +变量名:相当于vs中的监视某个变量的值
display +&变量名:查看地址
之后的每次n或者s都会显示这些变量的值(即会一直监视下去)
undisplay
undisplay +编号:取消监视这个编号的变量(一次可以输入多个编号)
直接undisplay:取消全部的监视
p
p +变量名:当我们只需要观察一次变量的值,而不是像监视一样一直有
finish
当我们s(F11,逐语句)进入某个函数,出不来时,我们可以 “finish”,直接 跑完这个函数
continue
continue:当有多个断点时,我们到达了一个断点,想直接到达下一个断点
until
until +行号:直接执行到某行(也是适用于逐语句跳不出函数或者跳不出循环的情况)
finish 与 continue 与 until的对比
d/delete
d +断点编号:删除某个断点
disable
disable +断点编号:不是删除断点,而是禁用断点。
enable
enable +断点编号:开启某个被禁用断点
bt
bt:查看函数栈帧
set var
set var +变量名=i:直接修改变量的值