# 核对表:关于调试的建议
## 寻找缺陷的方法
- [] 使用所有可用数据来构造你的假设。
- [] 不断提炼产生错误的测试用例。
- [] 在自己的单元测试族中测试代码。
- [] 借助可以获得的任何工具。
- [] 用不同的方式重现错误。
- [] 通过产生更多的数据来构造更多的假设。
- [] 利用证伪假设的测试结果。
- [] 用头脑风暴的方式找出可能的假设。
- [] 在桌上放一个记事本,把需要尝试的事情列出来。
- [] 缩小被怀疑有问题的代码区域。
- [] 对之前出现过问题的类和子程序保持警惕。
- [] 检查最近修改的代码。
- [] 扩展被怀疑有问题的代码区域。
- [] 采用增量集成。
- [] 检查常见的缺陷。
- [] 和其他人一起讨论你的问题。
- [] 抛开问题休息一下。
- [] 在使用快速肮脏调试法的时候,要设置一个时间上限。
- [] 列出所有的蛮力调试方法,逐条应用。
## 解决语法错误的方法
- [] 不要太信任编译器信息中给出的行号。
- [] 不要太信任编译器信息。
- [] 不要太信任编译器所给出的第二条出错信息。
- [] 分而治之,各个击破。
- [] 使用具有语法分析功能的编辑器来找出位置错误的注释和引号。
## 修正缺陷的方法
- [] 在动手之前先理解程序。
- [] 理解整个程序而非具体问题。
- [] 验证对错误的分析。
- [] 放松一下。
- [] 要保存最初的源代码。
- [] 治本,而非治标。
- [] 只有当理由充分的时候才去修改代码。
- [] 一次只做一个改动。
- [] 检查自己所做的修订。
- [] 添加单元测试来暴露代码中的缺陷。
- [] 找出类似的缺陷。
## 调试的一般方法
- [] 你是否会把调试看做是能让你更好地理解程序、错误、代码质量和解决问题方法的良机?
- [] 你是否会避免采用随机尝试查找错误或迷信式的调试方法?
- [] 你是否假设错误是你自己造成的?
- [] 你是否使用了科学的方法将间歇性的错误稳定下来?
- [] 你是否使用了科学的方法来寻找缺陷?
- [] 你在寻找缺陷的时候会使用多种不同的方法么?还是每次都是用相同的方法?
- [] 你会验证你的修改是否正确么?
- [] 你会在调试中使用编译器警告信息、执行性能分析、利用测试框架和交互式调试方法么?
