注册 登录
编程论坛 C语言论坛

GDB测试C程序的一个问题

stuyangzheng 发布于 2020-04-08 20:33, 1795 次点击
程序代码:

#include<stdio.h>
int func(int n)
{
   int sum = 0,i;
   for (i=0; i<=n; i++)
   {
        sum+=i;
   }
   return sum;
}

main()
{
  int i;
  long result = 0;
  for (i=1;i<=100;i++)
  {
     result += i;
  }

  printf("[1-100] = %d \n", result);
  printf("[1-250] = %d \n", func(250));
}

在main函数中的long result=0那一行和函数func中设置断点:
然后输入bt命令,结果是这样的:
只有本站会员才能查看附件,请 登录

让人困惑的是:结果显示成这样,是表示当前显示的栈里面有内容呢,还是没有内容?
如果有内容,为什么显示的结果和之后那个断点的结果显示不一样?
只有本站会员才能查看附件,请 登录

比较一下就能看出,后面这个显示栈里面内容的时候,变量是分配了内存地址的,而第一个断点这里就没有。
3 回复
#2
叶纤2020-04-08 21:23
你这有点简单程序复杂化了
有点像猴子问唐僧
说:“师傅,你咋滴啦?”
唐僧答
“为师感觉,有一股妖气从胃中上逆,经过我的横隔膜,导致,横膈膜痉挛收缩,现在喉间频频作声,声音急而短促”
猴子说“师傅啊,您死了,让徒弟我咋办?π _ π,
唐僧答
”  为师只是在打嗝“



#3
wmf20142020-04-08 22:03
不大理解楼主的描述。
bt命令是查看函数调用信息(堆栈),如果你把#1的内容当作变量内存分配应该不对,我觉得是函数func在main函数中被调用地址(也可能是函数func应返回的地址)。从编译的角度理解,你定义的任何变量在预编译时就已经分配了内存地址。
#4
stuyangzheng2020-04-09 09:44
回复 3楼 wmf2014
嗯,感谢感谢,主要是对bt命令的理解没到位。https://blog.,这篇文章里面有关于bt命令的详细解释。
1