1、预备:
我们利用vim在Linux下写好代码,在用Makefile编辑代码并运行,但如果一个代码有问题,我们如何像在编译器上调试一样在Linux上调试代码,就可以用到gdb/cgdb.
gdb调试代码需要源代码为debug版本,但g++/gcc默认运行的代码是release版本,所以在编译时我们需要用到-g选项。
以下面代码为例:
vim:
makefile:
eg:
2、gdb中的命令
预备:
r(进行调试运行)相当于F5
quit(q)退出gdb
(1)l + 行号/函数名(查看想要看的代码):
gdb会记录最近的命令,持续回车会一直进行该命令:
(2)b + 行号/函数名(打断点,并自动形成断点编号)
info + b (查看断点)
d + 编号(删除断点)
disable 编号(禁用断点)
enable 编号 (启用断点)
(3)n(逐步执行代码,逐过程相当于F10)
(4)s(单步进行,进入函数内部,相当于F11)
(5)display + 变量名(窗口显示变量值)(本质上也是一个断点,类型为可视断点)
undisplay 编号(取消常显示)
(6)until + 行号(跳到指定行)
(7)c(从一个断点调至下一个断点)
(8)finsh (执行当前函数)
(9)watch(查看变量的新旧值变化)
(10)p 打印变量值
(11)set var +变量 = xxx(改变变量的值为xxx)
从上面代码我们可以看出代码运行出错了,所以我们调试找出错误
利用断点不断找我们确定错误出现在除法,则我们通过在调试中改变变量的值来进一步确定并纠正错误
(12)b +行号 +if...(添加条件断点)
(13)condition 编号在已存在的断点上添加条件
3、cgdb
在gdb中我们无法边看代码边调试造成我们断点设置麻烦,所以我们有了cgdb可以让我们更好调试