现有一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,能搜到一大堆,这里就不再赘述啦~~