#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
result[1]=%d
", result[0], result[1]);
return 0;
}
1 root@ubuntu:/opt/liuzw# gdb ./test 2 GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04 3 Copyright (C) 2012 Free Software Foundation, Inc. 4 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 5 This is free software: you are free to change and redistribute it. 6 There is NO WARRANTY, to the extent permitted by law. Type "show copying" 7 and "show warranty" for details. 8 This GDB was configured as "i686-linux-gnu". 9 For bug reporting instructions, please see: 10 <http://bugs.launchpad.net/gdb-linaro/>... 11 Reading symbols from /opt/liuzw/test...done. 12 (gdb) i locals 13 No frame selected. //没有变量 14 (gdb) n 15 The program is not being run. //没有开始直接下一步是不对的 16 (gdb) start 17 Temporary breakpoint 1 at 0x8048415: file test.c, line 14. 18 Starting program: /opt/liuzw/test 19 20 Temporary breakpoint 1, main () at test.c:14 21 14 result[0] = add_range(1, 10); //开始运行程序,经过定义变量,执行了第一条语句 22 (gdb) i locals 23 result = {-1208188928, 2, 134513196, -1207960576, -1207963660, -1207963660, -1209922512, 1, -1208104168, -1208058708, 0, 0, 0, 0, 0, 24 0, 0, -1208104168, 0, 0, 0, 3, -163754450, 1011, 0, -1209886408, -1207959944, -1207984804, -1209921992, 0, 38, -1209734771, 0, 0, 1, 25 2224, -1208104120, -1208104872, 134513228, -1209884328, 134513148, 1, -1209313744, -1209313186, -1073745400, -1207963660, 26 -1207960880, -1073745164, -1073745232, -1208058151, -1073745264, 134513148, -1073745288, -1207960972, 0, -1208104120, 1, 0, 1, 27 -1207961320, 0, 0, 0, -1208205324, -1073745298, -1073745297, 1, -1209312327, -1073745297, -1073745298, 0, -1208008724, -1073745164, 28 0, 0, -1209728909, 134513228, 0, 12648448, 1, -1073744675, 47, -1073745220, -1208205324, 134513776, 134520820, 1, 134513373, 29 -1208204316, 13, 134520820, 134513809, -1, -1209728570, -1208205324, -1209728427, -1208036736, 0, 134513785, -1208205324} 30 //整形数组定义未初始化,内容为内存中随机值 31 (gdb) s 32 add_range (low=1, high=10) at test.c:6 33 6 for (i = low; i <= high; i++) //带跳转函数的下一步命令:执行到第一条函数调用处,并执行了子函数经过变量定义后的第一条语句 34 (gdb) i locals 35 i = 0 //查看当前变量值,i因为被形参low赋值0所以为有效值,sum因为没有被初始化,值为内存中随机数 36 sum = -1208060323 37 (gdb) n 38 7 sum = sum + i; //不跳转函数的下一步命令:执行了累计和函数 39 (gdb) i locals 40 i = 1 //经过累计和函数后,i变量执行到i++,所以增加1为1 41 sum = -1208060323 //经过累计和函数后因为sum = -1208060323、i=0,累加赋值sum还是-1208060323 42 (gdb) n 43 6 for (i = low; i <= high; i++) //不跳转函数的下一步命令,执行了for函数判断 44 (gdb) i locals 45 i = 1 //i由于被for一轮循环后的i++已经增为1 46 sum = -1208060322 //sum经过+i,已经从-1208060323增大到-1208060322 47 (gdb) n 48 7 sum = sum + i; 49 (gdb) i locals 50 i = 2 //经过累计和函数后,i变量执行到i++,所以增加1为2 51 sum = -1208060322 52 (gdb) n 53 6 for (i = low; i <= high; i++) 54 (gdb) i locals 55 i = 2 //经过累计和函数后因为sum = -1208060322、i=2,累加赋值sum为-1208060320 56 sum = -1208060320 57 (gdb) n 58 7 sum = sum + i; 59 (gdb) i locals 60 i = 3 //经过累计和函数后,i变量执行到i++,所以增加1为3,因为还没有继续累加,保持sum = -1208060320 61 sum = -1208060320 62 (gdb) n 63 6 for (i = low; i <= high; i++) 64 (gdb) i locals 65 i = 3 //经过累计和函数后因为sum = -1208060320、i=3,累加赋值sum为-1208060317 66 sum = -1208060317 67 (gdb) n 68 7 sum = sum + i; 69 (gdb) i locals 70 i = 4 71 sum = -1208060317 72 (gdb) n 73 6 for (i = low; i <= high; i++) 74 (gdb) i locals 75 i = 4 76 sum = -1208060313 77 (gdb) n 78 7 sum = sum + i; 79 (gdb) i locals 80 i = 5 81 sum = -1208060313 82 (gdb) n 83 6 for (i = low; i <= high; i++) 84 (gdb) i locals 85 i = 5 86 sum = -1208060308 87 (gdb) n 88 7 sum = sum + i; 89 (gdb) i locals 90 i = 6 91 sum = -1208060308 92 (gdb) n 93 6 for (i = low; i <= high; i++) 94 (gdb) i locals 95 i = 6 96 sum = -1208060302 97 (gdb) n 98 7 sum = sum + i; 99 (gdb) i locals 100 i = 7 101 sum = -1208060302 102 (gdb) n 103 6 for (i = low; i <= high; i++) 104 (gdb) i locals 105 i = 7 106 sum = -1208060295 107 (gdb) n 108 7 sum = sum + i; 109 (gdb) i locals 110 i = 8 111 sum = -1208060295 112 (gdb) n 113 6 for (i = low; i <= high; i++) 114 (gdb) i locals 115 i = 8 116 sum = -1208060287 117 (gdb) n 118 7 sum = sum + i; 119 (gdb) i locals 120 i = 9 121 sum = -1208060287 122 (gdb) n 123 6 for (i = low; i <= high; i++) 124 (gdb) i locals 125 i = 9 126 sum = -1208060278 127 (gdb) n 128 7 sum = sum + i; 129 (gdb) i locals 130 i = 10 131 sum = -1208060278 132 (gdb) n 133 6 for (i = low; i <= high; i++) //执行了for判断 134 (gdb) i locals 135 i = 10 //判断后达成,此时值sum继续累加10 136 sum = -1208060268 137 (gdb) n 138 8 return sum; //执行了子函数返回 139 (gdb) i locals 140 i = 11 141 sum = -1208060268 142 (gdb) n 143 9 } 144 (gdb) i locals 145 i = 11 146 sum = -1208060268 147 (gdb) n //下一个函数调用处,此处整形数组为未初始化 148 main () at test.c:15 149 15 result[1] = add_range(1, 100); 150 (gdb) i locals 151 result = {-1208060268, 2, 134513196, -1207960576, -1207963660, -1207963660, -1209922512, 1, -1208104168, -1208058708, 0, 0, 0, 0, 0, 152 0, 0, -1208104168, 0, 0, 0, 3, -163754450, 1011, 0, -1209886408, -1207959944, -1207984804, -1209921992, 0, 38, -1209734771, 0, 0, 1, 153 2224, -1208104120, -1208104872, 134513228, -1209884328, 134513148, 1, -1209313744, -1209313186, -1073745400, -1207963660, 154 -1207960880, -1073745164, -1073745232, -1208058151, -1073745264, 134513148, -1073745288, -1207960972, 0, -1208104120, 1, 0, 1, 155 -1207961320, 0, 0, 0, -1208205324, -1073745298, -1073745297, 1, -1209312327, -1073745297, -1073745298, 0, -1208008724, -1073745164, 156 0, 0, -1209728909, 134513228, 0, 12648448, 1, -1073744675, 47, -1073745220, -1208205324, 134513776, 134520820, 1, 134513373, 157 -1208204316, 13, 134520820, 134513809, -1, -1209728570, -1208205324, -1209728427, -1208036736, 0, 134513785, -1208205324} 158 (gdb) s 159 add_range (low=1, high=100) at test.c:6 160 6 for (i = low; i <= high; i++) 161 (gdb) i locals 162 i = 11 163 sum = -1208060268 164 (gdb) n 165 7 sum = sum + i; 166 (gdb) i locals 167 i = 1 168 sum = -1208060268 169 (gdb) n 170 6 for (i = low; i <= high; i++) 171 (gdb) i locals 172 i = 1 173 sum = -1208060267 174 (gdb) n 175 7 sum = sum + i; 176 (gdb) i locals 177 i = 2 178 sum = -1208060267 179 (gdb) s 180 6 for (i = low; i <= high; i++) 181 (gdb) i locals 182 i = 2 183 sum = -1208060265 184 (gdb) s 185 7 sum = sum + i; 186 (gdb) i locals 187 i = 3 188 sum = -1208060265 189 (gdb) quit 190