
5.3 gdb调试工具的使用方法
gdb调试工具有什么作用呢?习惯在Windows下开发的读者感觉不到调试工具的存在,比如使用Visual Studio做项目开发,需要调试时,使用快捷键F11就能进入程序的Debug模式。但在Linux系统中由于没有强大的图像调试工具,就需要借助gdb调试工具。gdb是一个纯命令行的调试工具,也是由GUN组织开发和维护的。在讲解gdb调试工具前,需要确保Linux系统已经安装了gdb调试工具,可以使用gdb-v命令来查看,如图5-13所示。

图5-13 查看gdb版本信息
这里主要介绍如何在Linux系统下编写一个C语言的程序文件,然后使用gdb调试工具进行调试。需要强调是,使用gdb调试工具的前提是源文件没有语法、语义的错误,即源文件能够通过gcc编译器的编译。因为基本上所有的Debug工具都是用来调试逻辑功能,而不是用来检查代码完整性的。在演示调试过程之前,先需要了解gdb常用的调试命令,详见表5-2。
表5-2 gdb调试工具常用命令

下面就来演示如何将一个源程序文件通过gdb调试工具,完成逻辑功能的调试。首先介绍一下test1.c程序文件的功能。test1.c文件的功能就是在Linux系统终端下比较输入的两个整数的大小,具体的函数实现是先声明一个能够返回最大值的函数Max,然后在主函数中调用它,具体的函数代码如图5-14所示。下面开始演示过程。

图5-14 test1.c文件代码
Step 1 由于gcc编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果想要编译后的程序可以被调试,编译的时候要加-g的参数,例如gcc-g-o test1 test1.c,接着使用gdb test1命令就进入gdb的调试模式了,如图5-15所示。
Step 2 具体的调试命令参见表5-2 gdb,下面演示run命令,如图5-16所示。

图5-15 进入gdb调试模式

图5-16 gdb执行run命令
Step 3 设置断点操作,如图5-17所示。

图5-17 gdb执行break命令
Step 4 执行当前语句操作,如图5-18所示。

图5-18 执行step命令
Step 5 设置继续程序的运行操作,如图5-19所示。

图5-19 执行continue命令
Step 6 设置变量和查看变量操作,如图5-20所示。

图5-20 执行p/set var命令
Step 7 执行删除断点以及退出gdb调试操作,如图5-21所示。

图5-21 执行clear/quit命令
小白成长之路:gdb调试工具的作用
我们为什么要讲解gdb调试工具呢?第一,gdb调试工具能够帮助优化程序的逻辑功能,解决实际问题;第二,通过使用gdb调试工具能够理解Windows平台下IDE软件调试的机理;第三,在编译Linux内核时需要gdb调试工具的帮助。