虚拟机无法修复内部错误
有些错误是无法复制的,或者至少是不容易复制的:间歇性和暂时性错误; 当您尝试寻找时会消失的错误; 由于一连串的独立操作或交叉请求时间而导致的错误。 这些错误中的某些仅在长时间处于高负载下运行的大规模生产系统中发现。
Capers Jones将这些错误称为“ 异常缺陷 ”,并估计在大型系统中,多达10%的错误无法复制,或者尝试复制的成本过高。 这些错误的修复成本比一个简单的缺陷高100倍-像这样的“平均”错误,可能需要一个多星期的时间,人们才能遍历设计和代码来找到(如果可以找到)。再过一两个星期才能解决。
黑森臭虫
Heisenbugs是一类无法复制的错误:当您尝试跟踪或隔离它们时,这些错误会消失。 当您添加跟踪代码或在调试器中逐步解决问题时, 问题就消失了 。
在调试中! ,Paul Butcher为处理这些错误提供了一些希望。 他说,Heisenbug是由不确定行为引起的,而不确定行为又只能由以下原因引起:
- 不可预测的初始状态– C / C ++代码中的常见问题
- 与外部系统的交互-可以隔离和中断,尽管这并不总是那么容易
- 故意的随机性-在测试中也可以排除随机因素
- 并发 –至少在Java中,今天是Heisenbug的最常见原因。