Effective Debugging
[希] 迪欧米迪斯·斯宾奈里斯(Diomidis Spinellis)
译者序
十几年前,我看过Spinellis先生所写的《代码阅读》(Code Reading)和《代码质量》(Code Quality)两本书,特别喜欢这种全面讲解编程工作中某个领域的教程,这次又读到同一位作者所写的《Effective Debugging》,感觉依然很精彩。
这是一本在思路和技巧上都较为丰富的调试手册。
从思路方面来说,本书介绍了许多宏观与微观的调试办法。例如,在面对软件故障时,既可以从整体情况入手,进行自上而下的调试,也可以从具体故障入手,进行自下而上的调试,还可以考虑用高级的抽象机制、便捷的程序库、直白的算法、简洁的逻辑,乃至另外一门更为合适的编程语言,对bug繁多的代码进行改写——这些思路,都能在调试工作中给人以启发。
从技巧方面来说,本书介绍了众多的调试工具与手法:有些可以在程序运行之前,设置断点并对表达式与程序的状态做出断言;有些可以在程序运行之中,将各种调试机制与程序进行连接,并对其执行情况进行记录;有些则可以在程序崩溃之后,通过核心转储等信息来还原当时的情境。此外,作者还讲解了如何把这些前置、中置和后置技巧与版本控制系统、静态分析工具、动态分析工具及性能测评工具结合起来使用,以提升调试的效率。
全书的8个大类中含有66条技巧,这些技巧都是围绕着“重现bug——探查bug——解决bug”这一主线而展开的。针对这三个阶段,作者进行了详细的分步讲解,给出了很多实用的范例代码与建议,而且特别强调了如何才能稳定地捕获并重现bug,以便给后面两个阶段打下良好的基础。
本书或许还能促使大家思考另外一个问题,那就是:在修复完bug之后,怎样防止有人向程序中引入类似的bug?这可以从代码质量与测试两方面入手。提高代码质量,能够减少程序员对代码的误解,进而降低引入bug的概率;而对测试进行完善,则能够提前捕获很多问题,从而不会使这些问题逐渐积累成复杂的bug。这…