在软件世界里,观察意味着设置断点、添加测试语句、监视程序值以及检查内存。
5.1 观察失败
当你发现bug时,你看到的其实是失败的结果。但实际的问题出在哪里呢?
如果你不能留意实际情况发生的全过程,那么你极有可能曲解很过问题。你猜测某个地方出现问题,于是修复它,但实际上错误发生在另一个地方。
5.2 查看细节
每次为了发现故障而观察系统,都会了解更多与失败有关的信息。这将帮助你确定应该进一步观察哪些地方以获取更多细节。最后,你会得到足够多的细节,这时才可以根据这些细节来查看设计并找到问题的原因。
5.3 问题忽隐忽现
在调试间歇性bug时,观察底层的失败细节有另外一个好处,就是:当看到底层的失败细节后,当你任认为已修复bug时,很容易证明确实已修复。
5.6 猜测只是为了确定搜索的重点目标
“不要想,而要看”并不意味着不能做任何猜想。事实上猜测是好事,特别是当成你理解系统之后。你的猜测可能很接近事实,但猜测只是为了确定搜索的重点。在尝试修复问题之前,仍需要再次看到失败,以便确认你的猜测是正确的。