gdb
一.准备工作
我们先写一段代码进行调试,因为gdb是调试器,所以必须在debug版本下才能使用,在编译代码时需要加上-g。
创建一个makefile文件
写一段用于调试的代码
编译
二.调试
1.进入和退出(q)
进入调试
退出调试
2.显示代码(l)
但这里并不是从第一行开始显示的,如果我们需要可以在后面加数字,指定它从多少行开始显示。
可以看到它只显示10行代码,如果想看到完整的,可以继续l 1,当然由于gdb会记住上一条指令,所以也可以直接回车。
当然也可以看某一个函数。
3.运行®和断点(d)
直接运行
直接使用r是一次运行完,很明显不符合调试的目的。我们需要断点,最常用的就是d+行号。
打完断点后,Linux并不像VS上有红色的点,所以如果我们想要查看断点,还需要使用info b。
Num代表编号,End代表是否开启,Address是地址,what是断点位置。
删除断点(按编号)
让断点失效
再打开断点
4.逐过程(n)和逐语句(s)
在VS里我们按F10就是逐过程,按F11就是逐语句。两者的区别就是逐过程不会进入函数内部,而逐语句会。
打上断点,开始运行
我们使用next(n)就是逐过程,可以不进入函数内部。
我们使用steo(s)就是逐语句,进入函数内部。
5.查看变量和地址
但是这个P有一个弊端就是只显示一次,当代码继续运行时,必须不断使用P。为了变量常显示,我们可以使用display。它可以自动刷新。
取消display(按编号)
6.跳出循环(until)和直接结束函数(finish)
在上面的函数里有100次循环,很明显我们不可能按100次n,为了能直接跳出来,我们可以使用until。
现在我们已经进入到函数里了,我想要直接得到结果而不是一步一步按下去,那么我们可以使用finish直接完成当前函数。
7.从一个断点到另一个断点©
为了迅速找到错误代码位置,我们可以多个断点,然后再断点之间运行,就可以很快判断出代码错误再哪两个断点之间了。