💛不要有太大压力🧡
💛生活不是选择而是热爱🧡
![]()
💚文章目录💚
- 1. 背景知识
- 2. 使用
1. 背景知识

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

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


可以查看到调试信息
2. 使用
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命令直接就把自定义类型或者数组中的元素全显示出来了
✨感谢阅读~ ✨
❤️码字不易,给个赞吧~❤️
![]()