将指定区间内的元素相加:
#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
命令开始执行程序(注意s
是step
的简写,原因很简单,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