gdb(Linux下的调试器)
前景提要
-
Linux下的gcc和g++默认动态链接形成的程序是release而不是debug,所以无法被直接调试
所以我们需要对gcc形成的程序进行强制管理
- 为了便于理解本文采用gdb与vs下的调试做对比
gcc 文件名 -o 文件名2 -g
#该指令形成的程序是debug版本可以被调试
#可以通过查看文件大小 debug版本文件 > release版本文件
gdb的基本操作指令
- readelf -s 文件名 :形成可执行程序下的各个分段
- gdb 可执行程序名 :启动gdb
- quit :退出gdb
- l(list) :采用默认方式显示代码
- l 0:显示所有代码
- r(run) :开始调试,若没有设置断点则直接运行至程序结束(相当于F5)
- b num :在第num行打上断点(相当于F9)
- info b :查看断点(包含断点的编号以及是否启用等信息)
- d num :删除编号为num的断点
- n(next) :逐过程调试(相当于F10)
- p 变量名 :打印指定的变量值
- s(step) :逐语句调试(相当于F11)
- bt :查看调用堆栈
- finish :直接跑完当前所在函数
- display 变量名 :常显示指定变量值(相当于监视)
- undisplay 变量编号 :取消所在编号变量的常显示
- until num :运行到num行/跳转到num行,一般用于函数内的局部性执行
- c(continue) :运行到下一个断点处
- disable/enable 断点编号 :打开或者关闭指定断点
- set var=num :设置变量var的值为num
gdb会记录最近一条命令,所以当前命令和上一条命令相同时可以直接回车