gdb Linux操作系统下的调试器
1、debug与relase的区别
我们在Linux下写下这样一段代码
然后进行编译得到可执行文件
这样得到的文件可以用gdb进行调试吗?
可以看到,系统提示我们没有找到调试信息,这是为什么?
因为gcc/g++默认生成的可执行程序是release版本,无法进行调试。
那我们要怎样得到debug版本?
使用-g选项生成debug版本,可以看到两个版本的大小差别
同样可以用readelf指令查看debug信息,mytest并没有debug文件,而mytest-debug则有。
2、gdb的基本指令(gdb指令基本都有全称与简写,这里基本全是简写)
gdb 调试文件名 ——》进入gdb调试模式
quit或q退出模式
list或l打印代码(gdb会默认记录上一条命令,如果不输入语句直接回车,就会默认执行上一条命令)
r重新开始调试,如果没有设置断点,则运行知道程序结束
b 行号 在指定行添加断点(如果改行没有代码则自动将断点设置到最近的位置)
info b 查看断点
d 行号 删除指定行的断点
c转跳到下一个断点
disable 断点编号 关闭断点但是不删除断点
enable 断点编号 开启断点
n逐过程调试
s逐语句调试
finish 进入完成当前行所在的函数
until 行号 直接运行到指定行(不要跨函数使用)
bt打印栈信息
p 变量名 打印变量数据
display 变量名 常显示变量数据
undisplay 常显示变量编号 取消该编号的常显示