前 言
我们在开发软件或对运行软件的系统进行管理的时候,经常会遇到故障。有些故障是因代码问题而引发的编译错误,这种故障可以在短时间内修复;还有一些故障则会使大型系统停机,这将给公司带来每小时数百万的损失(具体货币单位依情况而定)。要想成为一名优秀的专业人士,你就必须在发生故障时迅速找出背后的原因并加以修复。这正是调试的意义所在,也是本书所要谈论的主题。
本书是写给有一定经验的开发者看的,而不是一本介绍性质的读物。它假设读者能够理解用各种编程语言所写成的代码片段,并且会使用高级的GUI编程工具以及基于命令行的编程工具。另一方面,我会在书中详细描述调试技巧,因为我发现:即便是对某些开发方法很有经验的编程专家,也依然需要一些手把手的指导,才能够掌握其他的开发方法。此外,如果你已经花了至少几个月时间来调试一些颇具规模的软件,那么应该会更容易理解书中某些高级技巧所适用的场合。
目 录
第1章 宏观策略
第1条:通过事务追踪系统处理所有的问题
第2条:在网上确切地查询你所遇到的问题,以寻求解决问题的灵感
第3条:确保前置条件与后置条件都能够得到满足
第4条:从具体问题入手向上追查bug,或从高层程序入手向下追查bug
第5条:在能够正常运作的系统与发生故障的系统之间寻找差别
第6条:使用软件自身的调试机制
第7条:试着用多种工具构建软件,并将其放在不同的环境下执行
第8条:把工作焦点放在最为重要的问题上
第2章 通用的方法与做法
第9条:相信自己能够把问题调试好
第10条:高效地重现程序中的问题
第11条:修改完代码之后,要能够尽快看到结果
第12条:将复杂的测试场景自动化
第13条:使自己尽可能多地观察到与调试有关的数据
第14条:考虑对软件进行更新
第15条:查看第三方组件的源代码,以了解其用法
第16条:使用专门的监测及测试设备
第17条:使故障更加突出
第18条:从自己的桌面计算机上调试那些不太好用的系统
第19条:使调试任务自动化
第20条:开始调试之前与调试完毕之后都要把程序清理干净
第21条:把属于同一个类型的所有问题全都修复好
第3章 通用的工具与技术
第22条:用Unix命令行工具对调试数据进行分析
第23条:掌握命令行工具的各种选项及习惯用法
第24条:用编辑器对调试程序时所需的数据进行浏览
第25条:优化工作环境
第26条:用版本控制系统寻找bug发生的原因及经过
第27条:用工具监测由多个独立程序所构成的系统
第4章 调试器的使用技巧
第28条:编译代码时把符号信息包含进来,以便于调试
第29条:对代码进行单步调试
第30条:设置代码断点和数据断点
第31条:了解反向调试功能
第32条:查看例程之间的相互调用情况
第33条:查看变量及表达式的值,以寻找程序中的错误
第34条:了解怎样把调试器连接到正在运行的进程上
第35条:了解怎样运用核心转储信息来进行调试
第36条:把调试工具设置好
第37条:学会查看汇编代码及原始内存