1.GDB的概述
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
2.用GDB调试程序示例
源程序add.c:
#include <stdio.h>
int add(int i,int j)
{
return (i+j);
}
int main()
{
int a = 3,b = 1;
int sum = 0;
sum = add(a,b);
printf("sum is %d\n",sum);
}
注意:通过运行命令:gcc -g add.c -o add 对add.c来进行编译,其中参数g的作用是把调试信息加入到可调试信息加入到add可执行文件中去,否则GDB就无法对add进行调试。
接下来使用命令:gdb test 启动GDB对add进行调试
下面仅对一些常用的命令进行介绍:
(1)查看源文件
(gdb) l
从命令执行可以看出,GDB以10行为单位显示,再运行一次命令”l“就会显示下10行的代码。这样设计方便了源代码的阅读。
(2)设置断点
断点是调试程序的重要方法,通过断点我们可以知道程序每一步的执行情况(如当前变量的值,函数是否调用等)。在GDB中通过命令b进行断点设置。如下所示:
(gdb) b 15
可以看到命令b在程序的低15行进行了第一个断点的设置,并显示了改断点在内存中的物理地址。
(3)查看断点的情况
(gdb) info b
(4)运行程序
(gdb) r
在GDB中通过命令”r"来运行程序。gdb默认从代码的首行开始运行(也可以通过命令“r 行数”的方式指定行数开始运行。如果程序有断点,则程序会在断点的前一行暂停运行。
(5)查看变量值
(gdb) p n
(6)继续运行程序
(gdb) c
查看当前程序的运行情况后,使用命令“c"就可以继续将程序运行下去。
(7)单步运行
在程序逻辑比较复杂的时候需要程序一步一步的往下运行。在GDB中通过命令”s“(step的缩写)和”n“(next的缩写)让程序一步一步的往下运行。其中s可以发生函数调用时进入函数内部运行,而n不会进入到函数内部运行。