GDB 使用教程(二)

时间:2022-06-14 16:38:50

将指定区间内的元素相加:

#include <stdio.h>
int add_range(int low, int high)
{
int i, sum;
for (i = low; i <= high; ++i)
sum += i;
return sum;
}

int main(void)
{
int res[3];
res[0] = add_range(1, 10);
res[1] = add_range(1, 100);
printf("res[0] = %d, res[1] = %d\n", res[0], res[1]);
return 0;
}

然后编译,执行时,输出

res[0] = 55, res[1] = 5150

第一个结果正确,第二个结果显然不正确,应为 5050,高斯几百年前就告诉我们了。

在编译时要加上 -g 选项,生成的可执行文件才可能用 gdb 进行源码级调试:

$ gcc -g main.c -o main
$ gdb main
...
(gdb)
  • (1)(gdb) list 1 从第一行开始列出源代码,一次只显示 10 行,list可简写为 l
  • (2)gdb 提供了一个很方便的功能,在提示符下直接按回车表示重复上一条命令;
  • (3)start 命令开始执行程序(注意sstep的简写,原因很简单,step要比start更常用),gdb停在 main 函数中变量定义之后的第一条语句处等待我们发命令
  • (4)n(next),逐过程执行;
  • (5)bt(backtrace),查看函数调用的栈帧;
  • (6)i(info)查看 add_range 函数局部变量的值

    (gdb) i locals
    ...
  • (6)f(frame)指定栈帧号

    (gdb) f 1
    ...
  • (7)p(print)
  • (8)finish命令让程序一直运行到从当前函数返回为止;
  • (9)set var sum=0