1、单步执行
add_range函数从low加到high,在main函数中首先从1加到10,把结果保存下来,然后从1加到100,再把结果保存下来。
#include <stdio.h>
int add_range(int low, int high)
{
int i, sum;
for (i = low; i <= high; i++)
sum = sum + i;
return sum;
}
int main(void)
{
int result[100];
result[0] = add_range(1, 10);
result[1] = add_range(1, 100);
printf("result[0]=%d\nresult[1]=%d\n",
result[0], result[1]);
return 0;
}
当我们看到结果的时候,会发现第一个结果是55,第二个结果是5105,那么很明显第二个结果是不正确的,因为在高斯定理的故事中,我们就知道这个结果应该是5050.
2、编译选项
编译上加上-g选项,生成的目标文件才能用gdb进行调试:$ gcc -g main.c -o main
$ gdb main
gdb提供一个类似shell的命令行环境,上面的(gdb)就是提示符,在这个提示符下输入help可以查看命令的类别:
(gdb) help
(gdb) list 1 从第一行列出源码
(gdb) l add_range 列出add_range函数的源码
(gdb) quit 退出gdb环境
(gdb) n(ext) 一条一条的向下执行
(gdb) (直接回车) 重复上面的一条命令
3、断点
先看一个程序,接下来会调试这个程序,如下:
#include <stdio.h>
int main(void)
{
int sum = 0, i = 0;
char input[5];
while (1) {
scanf("%s", input);
for (i = 0; input[i] != '\0'; i++){
sum = sum*10 + input[i] - '0';
}
printf("input=%d\n", sum);
}
return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">编译一下,看有什么问题:</span>
$ gcc main.c -g -o main
$ ./main
123
input=123
234
input=123234
( Ctrl-C退出程序)
$