您的位置:首页 > 运维架构 > Linux

linux下使用GDB调试程序

2016-05-04 20:46 435 查看
现有一c源文件“gdb-01.c”,下面用GDB调试该程序。

/*gdb-01.c*/
#include<stdio.h>

static int sum(int value);

int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("参数输入错误!\n");
return -1;
}

int input = argv[1] - '0';
int result = sum(input);
printf("你输入的值为:%d,计算结果为:%d\n",input,result);
return 0;
}

/*累加求和函数*/
static int sum(int value)
{
int result = 0;
int i = 0;
for (i = 0; i < value; ++ i)   //该处有问题,需要debug出来
{
result += i;
}
return result;
}


首先用gcc编译“gdb-01.c”生成可执行文件test,为了能用gdb调试改程序,需要在编译时加入‘-g’选项。命令如下:

$ gcc -o test gdb-01.c -g

加载程序。用下面的命令将可执行文件test加载到GDB中,并进入(gdb)模式:

$ gdb test

设置输入参数。通常可执行文件在运行的时候需要输入参数,gdb中使用如下命令格式:”set args value1 value2 …”。例如,test中将一个参数(如3)传入程序:

(gdb) set args 3

打印代码内容。命令list用于列出可执行文件对应源文件的代码,命令格式为“list 开始的行号”,然后每次按Enter键后顺序向下列出代码。

(gdb) list 1

设置断点。b 命令在某一行设置断点,程序运行到断点的位置会中断。

(gdb) b 24

运行程序。GDB在默认的情况下是不会让可执行文件运行的。此时,程序并没有真正运行起来,只是装载进了GDB中。要是程序运行需要输入run命令。

(gdb) run 3

显示变量。在程序运行到第5步所设置的断点时,程序中断等待进一步指令。此时,可以进行一系列操作,其中,命令display可以显示变量的值。

(gdb) display result #显示变量result的值

修改变量的值。用set命令。

(gdb) set result = 6

(gdb) c #继续运行

退出GDB。调试完程序后,使用q命令退出GDB。

(gdb) q

$ #返回用户模式

上面给出了一个简单的例子来演示GDB基本使用。至于GDB的常用命令,直接百度或google,能搜到一大堆,这里就不再赘述啦~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: