和大家汇报一下让我吐血的Debug 6小时
今天忙活了一天,只写出了一个Javabean。理论上说,东西其实很早就写好了,只是.......,大家看图就知道了。上边这个图就是我要改造成Javabean的图表窗,因为图形涉及的信息很多,还要把bean封装起来的同时增加许多功能,原来100多行的源码在做成Javabean之后增加到了600行,东西做出来之后,套上数据试了一下,怎么差这么远?:funk:
这时候就痛苦了,因为在感觉一切顺利的时候出现无法识别的错误。之后老老实实一步步查错误呗,因为咱们是老实人,每一步都做得挺仔细,第一遍检查完了,没错...:Q
接着打开Netbeans的Debug功能查变量的状态了,同样没错......:L
真的没招了,老老实实照着源码把程序梳理一遍,再把删掉的貌似无用的语句copy回去,程序还是没错:yct_46 ,但是输出的数据就是不对:yct_59
因为用的是Jfreechart的类库,我都怀疑是不是类库的算法问题了......
在差不多6小时候,就在刚才睡眼惺忪的时候,再看了看产生的图形,哇哇,程序真的是没错的,是我自己把坐标看错了:yct_62
大家看到没有,这东西是多坐标轴的图,每条曲线对应不同的坐标轴的,之前我一直对着一个坐标轴看,当然其他的数据全是错的了......
我就因为眼神不好,浪费了6个小时:'( Haha
hehe :D :D :D :D :D ;P ;P ;P ;P ;P 这个永远不能避免的,Let's enjoy Debug 经验是DEGUG一个小时还没找到错误,就不再DEBUG了。
一般过几个小时,或者一天,答案自然就出来了 是啊,睡一觉,第二天一步步来,就能找到问题啦 许多年以前,有一次我debug一个workflow的程序,尝试了无数次,就是不对,后来,我发现,原因是,在那个IDE(visual age for java, eclipse的前身)里面的默认字体下,0和O分不清。 以前做汇编的时候,读某个端口的值经常有错误,Debug 一个礼拜找不出原因,后来硬件工程师发现是主板线路没有做好,换了个主板就好了。吐血到死啊 :funk: bug的弱智程度和解决它花掉的时间成正比...
据说pair programming可以解决这个问题
回复 #10 lol 的帖子
我碰到过类似的情况,以前做一个很简单的电路板,布线还偷懒用Altium Designer自动布线的,而且线的间距就设了一个很小的值,因为在电脑上看这个间距比实际大很多,当时也是没经验。结果做出来之后输出是随机的,时好时不好,拿到专门做电路的同学那里debug了半天,确诊是我的板子布线水平太烂所致。:L 良好的模块结构也能减少这种错误。比如楼主不是把数据直接输出,而是封装起来,这样就可以把先查看数据是否准确,再查看输出是否正常。
其实这就是MVC的最基本思想,加上必要的边界测试、特值测试,debug时间可以少很多。
当然,弱智的问题是经常的,多休息,多看美女会减少这种问题的发生。
原帖由 ritz 于 9-8-2010 22:07 发表 http://www.freeoz.org/ibbs/images/common/back.gif
bug的弱智程度和解决它花掉的时间成正比...
据说pair programming可以解决这个问题
回复 #13 key 的帖子
我同事解决这种问题的办法是,把我叫过去跟我讲解这个问题,blah,blah...然后我还没搞懂什么状况呢,他就说谢谢你,我知道是什么问题了...
回复 #14 ritz 的帖子
是啊,很有道理的,我当时一头雾水的时候也想找人讨论一下究竟怎么回事,但是我一个人在家里呢,没人和我讨论啊:Q 原帖由 ritz 于 9-8-2010 22:32 发表 http://www.freeoz.org/ibbs/images/common/back.gif我同事解决这种问题的办法是,把我叫过去跟我讲解这个问题,blah,blah...
然后我还没搞懂什么状况呢,他就说谢谢你,我知道是什么问题了...
呵呵,这种情况太普遍了:)
结对编程,他山之石...
往往你把你的思路说一遍,他提几个问题...然后你就灵光一闪,我知道怎么回事了!
最后当你激动地握着他的手道谢时,他都不知道你谢他啥:) 原帖由 hoopoos 于 9-8-2010 16:20 发表 http://www.freeoz.org/ibbs/images/common/back.gif
许多年以前,有一次我debug一个workflow的程序,尝试了无数次,就是不对,后来,我发现,原因是,在那个IDE(visual age for java, eclipse的前身)里面的默认字体下,0和O分不清。
好像在Java Puzzlers Traps Pitfalls and Corner Cases这本书里面有讲到这个,另外最好不要用小写的l(L)。 我不用下面几个字母:
i
l
o(少用,不是完全不用)
比如for(int i...)我一般会写成:for(int k...),
如果你见到有一套代码全部写成for(int k...),这套代码很有可能是我写的。
我不写 i ,主要倒不是在电脑上怎样怎样,而是我用笔把代码写出来时,这个 i 很让我头痛。
原帖由 felix100 于 10-8-2010 15:01 发表 http://www.freeoz.org/ibbs/images/common/back.gif
好像在Java Puzzlers Traps Pitfalls and Corner Cases这本书里面有讲到这个,另外最好不要用小写的l(L)。 原帖由 key 于 10-8-2010 15:34 发表 http://www.freeoz.org/ibbs/images/common/back.gif
我不用下面几个字母:
i
l
o(少用,不是完全不用)
比如for(int i...)我一般会写成:for(int k...),
如果你见到有一套代码全部写成for(int k...),这套代码很有可能是我写的。
我不写 i ,主要倒不是在电脑 ...
C++我一般用it代替i, QT下直接用foreach了就,更省事 我坚持使用i:lol :lol :lol 原帖由 lufumin1832 于 10-8-2010 16:21 发表 http://www.freeoz.org/ibbs/images/common/back.gif
我坚持使用i:lol :lol :lol 和乔布斯个性符合,可以去Apple面试了:victory: 阅,同意!
原帖由 coredump 于 10-8-2010 16:27 发表 http://www.freeoz.org/ibbs/images/common/back.gif
和乔布斯个性符合,可以去Apple面试了:victory: 就用一个i,不至于。
我的顺序i j k:$ :$
回复 #15 dark008 的帖子
Pragmatic Programmer里面提过一种方法,就是放只橡皮鸭子在桌面,向它解释你的问题:lolhttp://c2.com/cgi/wiki?RubberDucking 原帖由 key 于 10-8-2010 15:34 发表 http://www.freeoz.org/ibbs/images/common/back.gif
我不写 i ,主要倒不是在电脑上怎样怎样,而是我用笔把代码写出来时,这个 i 很让我头痛。
好奇,你为什么要用笔把代码写出来? :lol
我是传统的i,j,m,n:lol 原帖由 ritz 于 10-8-2010 22:07 发表 http://www.freeoz.org/ibbs/images/common/back.gif
Pragmatic Programmer里面提过一种方法,就是放只橡皮鸭子在桌面,向它解释你的问题:lol
http://c2.com/cgi/wiki?RubberDucking
我们经常这样情景模拟。比如说 Server为Mr. Server, Client 为Ms. Client
Mr. Server , please give me ....when.... where 谢谢!
原帖由 ritz 于 10-8-2010 22:07 发表 http://www.freeoz.org/ibbs/images/common/back.gif
Pragmatic Programmer里面提过一种方法,就是放只橡皮鸭子在桌面,向它解释你的问题:lol
http://c2.com/cgi/wiki?RubberDucking
页:
[1]