标题:GDB测试C程序的一个问题
只看楼主
stuyangzheng
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-4-8
结帖率:100%
已结贴  问题点数:20 回复次数:3 
GDB测试C程序的一个问题
程序代码:
#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命令,结果是这样的:

让人困惑的是:结果显示成这样,是表示当前显示的栈里面有内容呢,还是没有内容?
如果有内容,为什么显示的结果和之后那个断点的结果显示不一样?

比较一下就能看出,后面这个显示栈里面内容的时候,变量是分配了内存地址的,而第一个断点这里就没有。
搜索更多相关主题的帖子: 结果 int result 内容 显示 
2020-04-08 20:33
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
你这有点简单程序复杂化了
有点像猴子问唐僧
说:“师傅,你咋滴啦?”
唐僧答
“为师感觉,有一股妖气从胃中上逆,经过我的横隔膜,导致,横膈膜痉挛收缩,现在喉间频频作声,声音急而短促”
猴子说“师傅啊,您死了,让徒弟我咋办?π _ π,
唐僧答
”  为师只是在打嗝“




把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-04-08 21:23
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:20 
不大理解楼主的描述。
bt命令是查看函数调用信息(堆栈),如果你把#1的内容当作变量内存分配应该不对,我觉得是函数func在main函数中被调用地址(也可能是函数func应返回的地址)。从编译的角度理解,你定义的任何变量在预编译时就已经分配了内存地址。

能编个毛线衣吗?
2020-04-08 22:03
stuyangzheng
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2020-4-8
得分:0 
回复 3楼 wmf2014
嗯,感谢感谢,主要是对bt命令的理解没到位。https://blog.,这篇文章里面有关于bt命令的详细解释。
2020-04-09 09:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500949-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065802 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved