GDB断点设置与调试

gdb程序断点设置

    我们可以在程序的某一行设置断点,比如:(gdb) break 16,将在test.c的第16行设置断点。你可以查看自己设置的断点:(gdb) info break,断点(break point)是程序执行中的一个位置。在gdb中,当程序运行到该位置时,程序会暂停,我们可以查看此时的程序状况,比如变量的值。    

    设置断点,并使用run运行程序,程序将运行到16行时暂停。

gdb显示:Breakpoint 1, main () at test.c:16

16        for(i = 0; i < ARRAYSIZE - 1; i++) { 

 

gdb程序断点查看

     每个断点有一个识别序号。我们可以根据序号删除某个断点:(gdb) delete 1,也可以删除所有断点:(gdb) delete breakpoints,运行程序并没有什么有趣的地方。gdb的主要功能在于能让程序在中途暂停。

查看断点所在行:(gdb) list

查看断点处的某个变量值:(gdb) print a,(gdb) print array_a

查看所有的局部变量:(gdb) info local

查看此时的栈状态 (反映了函数调用,见Linux从程序到进程):(gdb) info stack

可以更改变量的值。

(gdb) set var a=0.0

(gdb) set var array_a={0.0, 0.0, 1.0, 1.0}

当程序继续运行时,将使用更改后的值。

如果我们将断点设置在:(gdb) break mean.c:2

此时栈中有两个a,一个属于main(),一个属于mean()。我们可以用function::variable的方式区分:(gdb) print mean::a

 

运行控制

让程序从断点开始,再多运行一行:(gdb) step

也可以使用下面命令,从断点恢复运行,直到下一个断点:(gdb) continue

使用run重新开始运行。 

 

退出

使用下面命令退出gdb:

(gdb) quit

debug

下面是一个有bugC程序,demo.c

#include <stdio.h>

struct node {

    int element;

};

typedef struct node *PNode;

int main()

{

    int i;

    PNode np=NULL;

    for (i=0; i<10; i++) {

        printf("Hello World!");

    }

    printf("%d \n", np->element);

}程序可以成功编译,但运行将返回:

Segmentation fault

可以使用gdb来查找问题。

posted @ 2015-03-12 09:01  jasononline  阅读(2470)  评论(0)    收藏  举报