目录
一、简介
二、gdb使用流程:
(1)gdb的启动
(2)调试中查看源代码
(3)开始调试
一、简介
GDB 全称“GNU symbolic debugger”,是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。所以对于一名Linux下工作的c/c++程序员,对gdb的了解是必不可少的。
二、gdb使用流程:
首先,我们现在Linux下写一个简单的c程序:
然后通过 gcc code.c -o test -g 编译该程序,-g使该编译后的文件是debug的,可以进行调试,不然默认情况下,gcc编译的文件是release的,无法进行调试。
(1)gdb的启动
指令:
gdb +被调试文件的文件名 #进入调试
quit #退出调试
输入gdb test 就可以直接对我们之前编译后的test文件进行调试,如果想退出调试,输入quit。
(2)调试中查看源代码
指令:
list 或 l 0 # 注意l是小写的“L”。Gdb会记录最近一次命令,所以输入一次后可以直接回车
继续显示,执行一次显示10行,显示完所有代码后会有提示。
(3)开始调试
指令:
r #开始调试该代码,如果每有打断点会直接运行结束
在没有打断点,调试程序就会直接从头到尾运行,所以,打断点就需要用到:
指令:
b+行号 #对代码中的某行打断点
info + b #查看我们所打的断点位置
打断点并调试:
查看断点:
当我们运行到断点位置后,想要像在编译器上调试一样,进行逐语句、逐过程进行调试,可以用:
指令:
n #逐过程调试,相当于F10
s #逐语句调试,相当于F11
我这里后面没有新写函数,所以n和s都是一句一句的调用了,但n和s的使用是没问题的。
如果我们想查看调试过程中的变量的值的变化,我们可以用:
指令:
p + 变量名 #在调试的过程中显示该变量的变化
新写了一段简单代码来举例:
这样是不是很麻烦呢,可不可以让他一直显示呢?当然是可以啦,我们这时需要用到:
指令:
display + 变量名 #随着调试的进行常显示该变量。
undisplay + 编号 #取消该编号对应的变量常显示。
注意:取消常显示是的指令对象是编号不是变量名。编号就是每一次变量显示值前面的那个数
在调试的过程中,如果有多个断点,我们运行到一个断点后,想要运行到下一个断点,可以用:
指令
c #运行到下一断点处
如果我们想要删除某个断点,可以用:
指令:
d + 编号 #编号是我们在info指令下查看的断点编号。
这里删除的断点编号,不能是我们打断点的行号,不然会删除失败或删错:
如果对你有用就支持一下吧,如果有什么问题,欢迎提出来哦。谢谢阅读!!!