📜  GDB(分步介绍)

📅  最后修改于: 2021-05-30 09:43:03             🧑  作者: Mango

GDB代表GNU Project Debugger,是一个功能强大的C语言调试工具(以及其他语言,例如C++),它可以帮助您在C程序执行过程中进行深入探究,还可以查看当程序崩溃时实际发生的情况。 GDB对可执行文件进行操作,这些可执行文件是由编译过程生成的二进制文件。

出于演示目的,在具有以下规格的Linux机器上执行以下示例。

让我们通过以下方式来学习:

1.转到Linux命令提示符,然后键入“ gdb”。

Gdb打开提示符使您知道它已准备好执行命令。要退出gdb,请键入quit或q。

2.下面是显示使用C99编译时未定义行为的程序。

注意:如果未自动初始化具有自动存储期限的对象,则其值不确定,其中不确定值是未指定的值或陷阱表示。

3.现在编译代码。 (此处为test.c)。
g标志意味着您可以在可执行文件中移动时查看堆栈框架中变量和函数的正确名称,获取行号并查看源代码。
-std = C99标志表示使用标准C99编译代码。
-o标志将构建输出写入输出文件。

4.使用生成的可执行文件运行gdb。

对于上述示例,以下是一些有用的gdb入门命令:-
运行或r –>从头到尾执行程序。
break或b –>在特定行上设置断点。
禁用->禁用断点。
enable –>启用禁用的断点。
next或n->执行下一行代码,但不要深入探讨函数。
步骤–>转到下一条指令,进入函数。
list或l –>显示代码。
print或p –>用于显示存储的值。
退出或q –>退出gdb。
清除–>清除所有断点。
继续–>继续正常执行。

5.现在,在gdb提示符下键入“ l”以显示代码。

6.让我们介绍一个断点,比如说第5行。


如果要在不同的行上放置断点,则可以键入“ b line_number ”。默认情况下,“ list或l”仅显示前10行。

7.为了查看断点,请键入“ info b”。

8.完成上述操作后,假设您改变了主意,想要还原。
输入“ disable b”。

如蓝色圆圈所示,Enb表示禁用。

9.重新启用最近禁用的断点。输入“启用b”。

10.键入“ run或r”运行代码。如果尚未设置任何断点,则run命令将仅执行完整程序。

11.要查看变量的值,请键入“ print variable_name或p variable_name ”。


上面显示了执行时存储在x处的值。

12.要在gdb中更改变量的值并以更改后的值继续执行,请键入“ set variable_name ”。

13.下面的屏幕截图显示了变量的值,从中我们很容易理解为什么我们将垃圾值作为输出,这是可以理解的。每次执行./test时,我们都会收到不同的输出。

练习:尝试在第一次运行时在gdb中使用set x = 0并查看c的输出。

GDB提供了更多调试和理解代码的方法,例如检查堆栈,内存,线程,操作程序等。我希望以上示例可以帮助您入门gdb。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。