debug && release
debug 能调试 有debug信息
release 不能调试 无dubug信息
用readelf -S
查看文件的二进制构成
我们只需要过滤出debug
信息即可
发现没有debug
信息
所以gcc
默认生成的是release
的
如果想生成debug
文件 必须携带-g
选项
这时就有了debug
信息
预备工作
先写一段简单的程序
使用gdb mytest
调试程序
list
或l
查看代码
我们调试代码的时候肯定是需要查看代码的
l num
查看第num行的代码
;
如果无法显示全部代码, 可以直接按enter
让文件下翻
;
l 函数名
查看某一个函数
;
;
r
运行代码
如果我们不打断点, 直接运行代码的话gdb
就会像正常运行一样
;
那我们怎么给程序打上断电
呢
;
b 行号
在该行打上断点(break point)
;
;
info b
查看断点信息
;
;
d 断点编号
删除断点
;
;
注意
如果退出了gdb
那么调试时设置的断点等信息就会消失
n
逐过程调试(next)
逐过程
与逐语句
的区别就是, 逐过程是会把函数调用直接跳过, 而逐语句是会进入函数内部的
逐语句
调试(step)
进行逐语句调试
p
查看变量的内容
;
;
display 变量
常显示变量内容
;
;
undisplay 编号
删除该编号变量的常显示
;
;
disable
使某个断点无效
;
;
enable
使某个断点生效
;
;
until 行数
让程序直接运行到该行再停下
untile
;
;
finish
跑完当前所在的函数
;
;
c
运行到下一个断点(continue)
;
;