NetRoc
从事了数年的软件开发,我觉得工作中最考脑筋的有两个方面:软件设计和软件调试。通常技术人员个人能力的高低,很大程度上也是看这两方面的能力。以往讨论软件设计的书都已经很多,但是软件调试却似乎一直没有得到足够的关注。当我个人试图从程序员的视角转换出来,更多的从全局的眼光来观察软件生命周期中的方方面面 时,很高兴能够读到《Windows高级调试》这本好书。
《Windows高级调试》(后面简称AWD)是一本实用化的书。整本书都是联系软件调试中的实际操作来讲述的。第二部分中分类讲解了各种常见的BUG问题的调试方法,每一部分都是按照如何识别问题、如何分析原因、如何调试确认这样的流程。这是非常符合我们在实际的调试工作中的思维方式的。
AWD是一本包含作者很多调试经验的书。令我印象非常深刻的是第二章中的一句话:"由于扩展命令!dreg的参数是非常长的,因此我们经常将这些参数从之前的调试会话中复制过来。一种常见的情况是,在每次分析调试会话之前,首先在文件中保存一组命令,然后再将根据需要将这些命令复制到调试会话中。"就像是一位调试经验丰富的朋友在谈话中偶尔传达给大家的经验之谈。虽然看起来不起眼,但是却常常能对工作起到很好的帮助。实际上,之前我自己在调试的时候就是像作者所说的这样做的。
刚刚接触软件调试和有丰富调试经验的开发人员都能从AWD中找到自己需要的东西。新手可以从作者讲解的分析思路中学到当遇到实际问题的时候应该从什么方面去思考。书中也还介绍了一些东西,需要相当调试经验才能理解它的作用,例如第6章对堆内存分配机制的内容。通常来说很多问题并不需要了解堆分配的细节就能解决,但是有一些特殊情况,例如通过工具和命令不能自动分析,必须手动分析堆管理器的内部数据时。关于软件调试的内容,有很多是可以马上用到手上的,但是也有很多需要在读完之后在漫长的实践和经验积累中才能慢慢体会到作用的。
如果想全面了解软件调试技术,单看AWD这一本书是不够的。这本书比较遗憾的是没有系统的介绍调试器和各种调试工具的使用。很多命令和工具是穿插在调试场景中介绍的。不过这方面的内容也足以写一本几百页的书了,AWD的篇幅可能没有办法面面俱到。关于调试器和调试工具的使用,建议读者也专门找一些资料来学习,例如WinDbg的帮助文档就是非常好的资源。
2009-07-10