嵌入式调试器GDB调试过程

1.GDB的概述

GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。

一般来说,GDB主要帮忙你完成下面四个方面的功能:

    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
    2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
    3、当程序被停住时,可以检查此时你的程序中所发生的事。
    4、动态的改变你程序的执行环境。

从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。


2.用GDB调试程序示例

源程序add.c:

#include 
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不会进入到函数内部运行。








你可能感兴趣的:(Linux,-,C)