一、调试九大规则
1. 理解系统
2. 制造失败
3. 不要想,而要看
4. 分而治之
5. 一次只改一个地方
6. 保持审计跟踪
7. 检查插头
8. 获得全新观点
9. 如果你不修复 bug ,它将依然存在
二、九大规则的具体解释
1. 理解系统
简单来说,就是要熟悉业务。这条规则最重要。
更具体点,你必须知道系统的工作原理以及它是如何设计的,某些情况下,还要知道为什么这样设计。
你需要做到以下:
- 阅读手册。阅读相关文档
- 仔细阅读每个细节
- 掌握基础知识
- 了解工作流程。知道所有的模块和接口都是做什么
- 了解工具。花时间学习与工具的一切,同时要了解工具的局限性
- 查阅细节。不应盲目相信自己的记忆,养成良好的查阅习惯
2. 制造失败
简单来说,就是复现 bug 。
试着让 bug 重现有一下3个原因:
- 可以观察它
- 可以专心查找原因。准确地知道在什么条件发生,有助于集中精力查找原因
- 可以验证是否已修复问题
怎么制造失败(重现):
- 从头开始。试着从一个已知的状态出发
- 引发失败。尽量自动化
- 但不要模拟失败。要模拟导致失败的条件,而不是模拟识别机制本身
- 处理间歇性失败(偶现 bug )。改变能控制的条件,直到失败发生
- 记录每件事。让系统尽可能多的输出信息,并记录到日志
- 如果得到足够多的信息,需要确定哪些与 bug 有关
- 用好调试工具
3. 不要想,而要看
凭空想象,问题可能有几千条原因,而实际的原因只有去看了才能发现。
- 观察失败。仅靠猜测某个地方出了问题就修复它,不仅没修复问题还可能把真正问题隐藏起来,还误以为修复了问题
- 查看细节。一直观察,直到把问题原因锁定在几种可能之内
- 植入插装工具。其实就是用工具调试,并记录日志
- 不要害怕深入研究
- 注意海森堡效应。测试工具可能影响被测系统
- 猜测只是为了确定搜索的重点。但不要过分依赖猜测以免被引入歧途
4. 分而治之
其实就是排除法,逐步逼近,这是调试的核心
- 确定问题范围
- 逐步逼近缩小搜索范围
- 从有问题的一边开始搜索。不要把精力花费在没问题的地方
- 修复探索过程中的已知bug
- 消除干扰因素
5. 一次只改一个地方
不要乱改,为验证问题,一次只改一个地方
- 隔离关键因素,别改出了其它问题
- 一次只改一个测试
- 与正常情况进行比较。这样才能发现问题所在
- 确定自从上一次正常工作以来你改变了什么
6. 保持审计跟踪
- 记下你所做的事、做事的顺序,以及发生的结果,写下来
- 任何细节都可能是重要的
- 把时间关联到一起
- 检查代码关联工具看是否是那一次修改引入了 bug
- 把 bug 修复过程记录下来,形成自己的 bug 修复集
7. 检查插头
一些显而易见的假设往往是错误的。
- 质疑你的假设
- 从问题开始观察
- 对工具进行测试,工具本身也可能有 bug
8. 获得全新观点
要想重新理清一个案子的头绪,最好的方法就是把它讲给别人听。 - 福尔摩斯
如果问题没有头绪,不妨休息下,听听别人的看法
- 寻求帮助。人们通常很愿意帮忙,因为这给了他们一个证明自己很聪明的机会
- 向别人解释问题会让你对问题有全新的认识。小黄鸭调试法
- 咨询专家,获取专业知识
- 借鉴别人的经验。如果有人出现过类似问题,不妨找他们了解下
- 放下面子。bug 发生了,以除掉 bug 为自豪,而不要非得已自己除掉 bug 才为自豪
- 寻求帮助时,报告问题发生现象,而不是自己的猜测,以免误导他人
9。 如果你不修复 bug,它将依然存在
- 验证问题确实已被修复。不要假设它已被修复,要测试它
- 验证确实是你的修复措施解决了问题。而不是自己在修复过程中误操作
- bug 从来不会自动消失。也许当时复现不了,当它终会出现
- 从根本上解决问题
- 对过程进行修复
三、当你的用户发现了 bug
实际上很多时候 bug 是通过用户发现的,他不一定了解这些专业知识
- 不能全信用户的观点
- 多依赖日志
- 要让发生问题的用户告诉你他们做了什么
- 不要假设用户如何使用你的产品。对所有的事情都要进行确认
- 如果问题再次复现了,让用户联系你
程序调试界的独孤九剑 - 《调试九法》读书笔记
《调试九法》热门书评
-
Debugging领域为人遗忘的经典
19有用 1无用 西山 2010-01-19
五星!力荐!!对于一本被冷落的经典,我觉得这还是远远不够的!我很希望能有更多的人了解这本书,从而从中学到一些东西。说实话,看到豆瓣里这本书"2人读过,2人想读"的统计结果,我感到十分的诧异。在我看来,这绝对是一本软件调试领域的经典作品,相信很多人都读过《设计模式》,我很愿意将其比...
-
调试是个技术活
1有用 0无用 小裁缝 2016-12-24
一般当工程师把一个东西称为艺术甚至玄学的时候,说明这个东西难度很大,没有太多规律可以遵循,调试就属于此列。几乎每个程序员都有被bug搞到死去活来的经验,有时候颠来倒去,问题似乎解决了,但也不知道为什么,就把它当作不可解释的玄学现象,最烦人的一种bug是偶尔出现难以复现的,学名海森堡bug。不过毕竟软...
-
调试领域的圣经,非常实用
0有用 1无用 Brad 2013-06-07
不到200页的篇幅,里面全部是精华,所有工程师看了都会受益的书,看完绝对调试能力显著增强。s_b 豆瓣,字多就有含金量吗?s_b 豆瓣,字多就有含金量吗?s_b 豆瓣,字多就有含金量吗?s_b 豆瓣,字多就有含金量吗?s_b 豆瓣,字多就有含金量吗?...
-
程序调试界的独孤九剑 - 《调试九法》读书笔记
0有用 0无用 曲天 2017-03-19
一、调试九大规则1. 理解系统2. 制造失败3. 不要想,而要看4. 分而治之5. 一次只改一个地方6. 保持审计跟踪7. 检查插头8. 获得全新观点9. 如果你不修复 bug ,它将依然存在二、九大规则的具体解释1. 理解系统简单来说,就是要熟悉业务。这条规则最重要。更具体点,你必须知道系统的工作...
-
《调试九法:软硬件错误的排查之道》读书笔记
0有用 0无用 hello world. 2017-04-25
调试九法:软硬件错误的排查之道-“你知道,现阶段我非常忙,但我打算在晚年倾力写一本书,把所有侦探艺术都集中写在这本书里。”-福尔摩斯《格兰其庄园》调试规则-“我在这里要讲的理论(可能你认为它们非常荒谬),实际上...
书名: 调试九法
作者: David J·Agans
出版社: 人民邮电出版社
原作名: Debugging: The 9 Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems
副标题: 软硬件错误的排查之道
译者: 赵俐
出版年: 2010-12-7
页数: 142
定价: 35.00元
装帧: 平装
丛书: 图灵程序设计丛书
ISBN: 9787115240576