💛不要有太大压力🧡
💛生活不是选择而是热爱🧡
💚文章目录💚
- 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命令直接就把自定义类型或者数组中的元素全显示出来了
✨感谢阅读~ ✨
❤️码字不易,给个赞吧~❤️