"已经很明显了,每次都是for这句改变了input[5]的值,而且是每次加1,而for这句里的i正是每次加1的,原来input[5]就是i的存储单元,换句话说,i的存储单元是紧跟在input数组后面的。"--应该跟编译器有关!!!! 我用的是gcc4.3.2编译的. input[5]的内容应该是sum的高位字节. 从内存分布来看-0xb(ebp)->sum, -0x8(ebp)->i, -0x11(ebp)->input, 所以input后面存储的内容应该是sum
Why is 'watch' failed? I mean the program cannot be stopped on watchpoint. I know the method is correct because when I run the same command on other machine, it works well. I guess it's virtualbox's fault.My environment is ubuntu running on Virtulbox 3.0. Who knows the answer to correct it?
宋老师:例10.3中的程序,应该将变量sum和i,调换一下位置。
回复以上三位读者: 这一章所举的例子运行结果都是跟编译器有关的。正确的程序跑出来都一样,错的程序跑出来的错误结果各不相同。不必拘泥于我所举的例子,只要本章介绍的gdb命令理解了就行。读者可以自己设法构造一个程序复现书中所讲的结果。
请问,当找出10.3的bug后用什么方法修正比较好?我通常是在char input[5]之后再随便定义一个什么变量,让这个变量占据input[5]的空间。该变量通常不用所以无所谓。 还有一种办法是把char input[5]定义改成char input[6]。 不知道宋老师有没有更好的办法?
请参考C标准库一章
例程好像错了,要把i的定义,紧跟着input数组的定义,才能出实验的效果
请你看上面的讨论先。
(gdb) x/7b input 0xbfb8f0a7: 0x31 0x32 0x33 0x34 0x35 0x00 0x00 这里好像是(gdb) x/7x input 显示十六进制的。 感谢老师,终于把gdb看懂了,编译时可以不加-g参数,使用的命令不一样,使用run的和start的有什么区别!
(gdb) x/7b input 0xbfb8f0a7: 0x31 0x32 0x33 0x34 0x35 0x00 0x00 不好意思,是对的。
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!