D 的个人博客

开源程序员,自由职业者

小而美的 Java 博客系统 Solo
Golang 在线 IDE Wide
黑客与画家的社区 Sym
  menu
401 文章
1,868 评论
3399516 浏览
6 当前访客
ღゝ◡╹)ノ❤️

引由Eclipse调试器中的Watch(观察)[00原创]

这几天正在用Java写一个类似PL/0的编译器,前几天都在做设计和看书,今天开始实现。
做编译器这种东西,要用很严谨的态度对待,所以还是决定用惯用的——TDD开发方式进行开发。
这里,我的开发环境是Ubuntu 7.04 + eclipse Europa(classic version) + Sun JDK1.6.0_02-b05
白天开始写源代码扫描器和词法分析器,一直遵循TDD的小步增量式开发方法。
在词法分析中有个方法基本是一气呵成写的,相当长(200+行),本想在测试通过后来重构的,可惜的是测试没通过,- -!汗颜。。。。
让后就开始找问题,不得不开调试器单步调试。发现在这个方法里存在逻辑问题,在一些情况下会导致死循环
- -!再次汗。。。。
一定要想好算法再实现!
再次运行测试用例,怎么还是红条条呢?
没办法,还是得再开调试器继续调试。这次调试很诡异,按F6(Step Over)的时候发现有个类的关键字段(类型为int)的值居然会作自加运算,没有任何人对它修改,它怎么能自己变呢????顿时- -!!!!瀑布汗啊。。。。
调试了好几次,问题都一样,郁闷死。
关了eclipse再开,问题依旧。
后来用NetBean 5.5.1调试,没问题啊!
再开eclipse,清除了所有Watchs(观察),发现问题没了。。。。后来仔细查看发现我以前对一个setter方法设置了设置了Watch,每次进行调试的时候一个step后Debugger就会自动调用那个方法,结果可想而知。

这个简单,甚至是比较stupid的问题我花了一个晚上才弄明白。事后,我一直在想测试——调试这两者的关系,记得2007年5月的《程序员》的主题就是调试和测试,现在终于有了点切身体会。
回到TDD上来,我认为确实的实行TDD是需要那个开发者有着很深的软件工程思想领悟以及相当的OOAD功底的。另外就是不能忽视TDD中的Refactoring步骤的重要性,好的重构可以让后续开发更简单,不管是对自己还是对其他人:-)

呵呵,这个假期买了4本书——《重构——改善既有代码的设计》、《敏捷软件开发——原则、模式和实践》、《重构与模式》、《Java与模式》,正在努力消化,努力领悟OOAD的精髓。
总之,多看书有益身心健康 :-)

评论