D 的个人博客

全职做开源,自由职业者

  menu
412 文章
3446695 浏览
16 当前访客
ღゝ◡╹)ノ❤️

引由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 的精髓。
总之,多看书有益身心健康 :-)