gdb的使用
- 1.进入gdb
- 2.list/l 行号
- 2.r
- 3.break/b 行号
- 4.info break
- 5.delete breakpoints
- 6.disable breakpoints 和enable breakpoints
- 7.n或next
- 8.s或step
- 9.display和undisplay
- 10.until 行号
- 11.finish
- 12.continue(c)
- 13.set var
- 14.bt
- 15.p 变量
程序的发布方式有两种,debug模式和release模式
在linux下也是同样的,但是在linux gcc/g 出来的二进制程序,默认是release模式,因此要使用linux下的gdb调试,则必须在源代码生成二进制程序的时候,加上-g选项
大家仔细看,release和debug的大小不一样,debug版本的更大,他其中包含了很多调试信息,可以使用readelf -s 文件名 | grep -i debug来查看有哪些调试信息
上图为进入gdb的样子
list和l都是可以使用的,在后面还可以加上行号,也可以一直回车,接着上次的位置往下列,每次列10行
也可以使用 l 函数名 来列出某个函数的源代码
r是运行程序开始调试,相等于vs下的f5,其实他更适合跟后面要讲的断点相配合使用
因为没有断点,所以说直接运行出了结果
break是在某一行设置断点
后面也可以加的是函数名
也可以 break 是文件名:函数
info break是用来查看断点信息的
删除所有断点
delete breakpoints n:删除序号为n的断点
注意:一定是序号
其实本质上好多命令都是可以缩写的,就像删除断点,可以是 d 序号
disable breakpoints:禁用断点
enable breakpoints:启用断点
禁用断点后,运行时不会用到这个断点
n是指的是逐过程,相当于vs下的f10
s或step:逐语句,相等于vs下的f11
display:长显示,跟踪查看一个变量,每次停下来都显示它的值
undisplay:取消对先前设置的那些变量的跟踪
until 行号:在函数内,进行指定位置跳转,执行完区间代码
finish:进入一个函数,只执行完该函数,就停下来
continue(c):从一个断点处,直接运行至下一个断点处
set var n=xxx:设置某一个变量是特定的值
查看调用堆栈
p 变量:打印变量值