日期:2014-05-16  浏览次数:20518 次

使用GDB进行调试
使用GDB调试C程序
GDB是GNU开源组织发布的一个非图形化的Unix下的程序调试软件。
它能使用户在程序运行时观察数据的内部结构和内存使用情况。


GDB提供的主要功能:
1)监视程序中的变量值
2)设置断点,使程序在指定代码行停止。
3)单步执行
4)动态改变程序的执行环境



一、调试一个简单的程序
1、编写主程序test.c
#include <stdio.h>

int main(int argc, char *argv[])
{
        int i=0;
        for(i; i<10; i++)
        {
                printf("%d\n", i);
        }

        return 0;
}


2、编译程序为可执行文件test
$ gcc test.c -g -o test
为了使用GDB进行调试,必须加上-g选项,这样可以使程序在编译时包含调试信息。


3、载入test可执行文件,启动GDB调试
$ gdb test

看到上面类似效果,说明GDB成功载入了test可执行文件


4、现在,可以对程序进行一系列的调试了
调试时,常用的命令有:
file:装载要调试的可执行文件
kill:终止正在调试的程序
list:列出源码
run:执行程序
break:设置断点
watch:动态观察某个变量
next:执行下一行
quit:退出GDB
make:不退出GDB,而重新生成可执行文件
call name(args):调用并执行name,参数为args的函数

return value:停止当前函数,并返回设定的value给调用者


a、列出源码

(gdb) list



b、执行程序

(gdb) run



c、设置断点,并重新执行可执行文件

(gdb) break 6

(gdb) run


可以看到,程序在第6行被挂起了


d、单步执行

(gdb) n

(gdb) n

(gdb) n

(gdb) n

(gdb) n

(gdb) n


可以看到,程序在6-8行之间重复执行


e、监控变量i

(gdb) watch i

(gdb) n


Hardware watchpoint 2:i,表示这是第二个监控点,变量为i

Old value、New value能让你看到变量的变化情况


f、输出变量的值

(gdb) print i


$2,表示第二个监控变量,此处表示变量i,当前值为3


更多关于GDB,可以参看百度百科 http://baike.baidu.com/view/639266.htm