💛不要有太大压力🧡
💛生活不是选择而是热爱🧡
![]()

1. 程序发布的方式有两种,debug模式和release模式
2. Linux下,gcc和g++编译生成的可执行程序默认是release模式
3. 要使用gdb调试,必须在debug模式下进行调试,要加上-g选项

如果写makefile的时候 不加-g选项的话,就无法调试。(没有找到调试信息)
如果用-g选项生成了可执行文件,我们如何查看调试信息呢?
$ readelf -S mytest | grep -i debug


可以查看到调试信息
gdb mytest:进入开始调试
list或l:显示mytest的源代码,后面直接回车即可(因为gdb会记住最近的一条命令,如果命令无变化,可以直接回车),每次显示十行。(默认可能不是从最开始打印)

list或 l 0:从第一行开始显示

list/l 函数名:列出某个函数的源代码

run / r:开始调试,如果没有设置断点,就直接运行结束

break / b 行号:给某一行打断点

info b:查看断点

delete / d 断点序号:删除断点
删除断点要结合 info b来看,因为打断点的时候会自动生成断点的序号

单独一个d会删除所有断点
next / n:单条执行.(逐过程)

print / p 变量:打印变量的值

step / s:步入.(逐语句,会进入函数)

bt:查看调用堆栈

finish:直接运行完当前函数
如果此时进入了一个函数,但是不想继续一步一步走了,想直接运行完这个函数,就用finish
注意:finish只能结束main函数之外的函数

display:长显示
在循环中,我们时常要查看循环变量的值是多少,可以用长显示让循环变量一直显示着

undisplay 长显示变量的编号:取消变量的长显示
给变量长显示之后,会对应前面有一个编号

until X行号:跳至X行
注意:until是函数内跳转,不会调到函数外部,如果该函数在main函数中的位置是第18行,那么你输入的行数超过18行,他还是会停在18行

continue / c :跳到下一个断点


并且跳到下一个断点的时候,两个断点中间的代码是被执行了的
disable 断点编号:禁用断点

enable 断点编号:启用断点

set var 变量名 = 值:设置变量的值

打印自定义类型 或者 数组
p就可以做到


可以看到,p命令直接就把自定义类型或者数组中的元素全显示出来了
✨感谢阅读~ ✨
❤️码字不易,给个赞吧~❤️
![]()