>第 10 章 gdb>单步执行和跟踪函数调用

ddd ddd@clf.net
2008-12-03 19:42:07

这个程序的结果不一定是
55
5105
局部变量的初始值是随机的。


宋劲杉 songjinshan@akaedu.org
2008-12-07 15:52:08

谢谢您的建议。不过我在脚注中已经说明了第一个结果也未必是正确的。我举这个例子就是为了说明了结果有时正确有时不正确,如果出现这种现象怎么办,首先应该怀疑有些局部变量的初始值是随机的。


曾华阳 yong2635@foxmail.com
2009-07-09 16:04:30

老师我用(gdb)start试过不能出现书上的效果
出现这种情况
(gdb)start
undefined command:"start".try "help".
是否有可能是因为GDB安装不完全···
但是其他的命令都可以正常使用··


宋劲杉 songjinshan@akaedu.org
2009-07-12 13:13:32

这我真不知道了。你的gdb是什么版本?


曾华阳 yong2635@foxmail.com
2009-07-14 18:19:53

我也不清楚呢···
不知道怎么看软件版本,我用的是网上下的
red hat9.0用虚拟机安装,当时选择了安装所有的软件。
不过我最近换了一个比较新的linux系统start
就可以用了,看来真是版本问题。


码匠 code_smith@sohu.com
2009-09-05 18:01:53

I met another case about failing to run "gdb-->start" in Virtualbox 2.10. It took me a whole night to sovle it. 

The result makes me annoyed. It's just a defect of this Virtualbox version. Update to Virtualbox 3.0, the problem can be fixed. I guess not many people have the same prolblem as I met. I'm always lucky to meet somethings beyond my mind now and then.

The worst thing I don't wanna see is that when I've made a determination to do something well, I am put out of the door at the beginning because other things wrong, such as envrionment, configuration etc...

I hope my C journey on this website will be soomth & interesting, and I will & must get to the end point of this journey. :_) 



赵伟峰 abao88@yeah.net
2009-12-16 21:23:04

一个很小的错误,在书(2009.12月版)中第15页:
printf("character:\ninteger: %d\nfloating point: %f\n", ')',34,3.14);
联系下文,圆括号应为'}'。


宋劲杉 songjinshan@akaedu.org
2009-12-27 15:12:39

谢谢指出!您看得可真仔细,不仅挑出来这么小的一个错误,而且还追溯了源头,发现不是我弄错的而是出版社弄错的。等他们第二次印刷时我会提醒他们改的:)


ben ben@wiredcraft.com
2010-03-12 18:19:31

int add_range(int low, int high)
{
	int i, sum;
	for (i = low; i <= high; i++)
		sum = sum + i;
	return sum;
}
这个局部变量是不要这样定义:
  int i, sum = 0;


岳阳 sjz.yueyang@gmail.com
2010-07-16 23:27:21

您好,文中提到“由于局部变量i和sum没初始化,所以具有不确定的值”,i变量没有定义为static,且有i = low赋值操作,应该是被初始化的吧?


宋劲杉 songjinshan@gmail.com
2010-07-19 22:20:48

第一,赋值和初始化是两个不同的概念,第二,后面已经解释了“i的初值不是0倒没关系,在for循环中会赋值为0的,但sum如果初值不是0,累加得到的结果就错了。” 我觉得已经没有任何歧义了。


Louis alzl333@sina.com
2010-08-11 16:43:35

宋哥:
你好。
联系上下文,
“(gdb) (直接回车)……”
这一小段18后面应该有一个“}”。


宋劲杉 songjinshan@gmail.com
2010-08-15 16:53:16

谢谢指出!你看得真仔细~


胡 waterloo2005@gmail.com
2010-09-19 16:22:33

为什么说"i的初值不是0倒没关系,在for循环中会赋值为0的"?
for中i不是被low赋值的吗?谢谢


宋劲杉 songjinshan@gmail.com
2010-09-20 08:54:43

谢谢指出!


关红福 chf007server@gmail.com http://www.szns.org/
2010-10-10 22:00:43

@曾华阳
好象有的版本的GDB的确没有start。
我的GNU gdb 6.1.1 [FreeBSD]就没有。
不过可以先b main再r就可以了。
因为GDB手册上讲start的本意就是在第一个入口函数处设断点并run


张士伟 zzhangsiwei@163.com http://learn.akae.cn/media/ch10s01.html
2011-04-14 16:14:34

至少有俩个错误: 
sum 没赋初始值
结果说的也不对……


杨帆 bigben1102@hotmail.com
2011-07-08 15:09:52

我的是 Red hat 9.0的  里面的GBD 就没有start这个命令,不过楼上的说得很对,我试了一下,先b main再r,


laciqs 530107999@qq.com
2011-09-04 14:03:38

在别处看到了三个缩写,不知道通用不:
display→disp
delete→d
i locals→i lo


laciqs 530107999@qq.com
2011-09-04 14:05:55

还有一个:
watch→wa


wangzhengyi 15866883396@126.com
2011-10-09 22:46:45

没有采用gdb,感觉linux的开发工具还是挺多的 ,比如netbean等,不过这个程序的错误还是很好发现的,局部变量sum没有初始化赋值为0,所以结果会产生随机数


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!