加载中...

Heisenbug(海森堡 Bug)指一旦尝试观测或调试就改变行为甚至消失的 bug:加上断点或日志后无法复现,去掉调试手段又重新出现。得名于物理学家海森堡——戏仿量子力学中「观测影响被观测对象」的不确定性原理。
典型根源包括:多线程竞态条件(调试器或日志改变了线程时序,竞态窗口消失)、未初始化内存(调试模式下内存布局或填充值不同)、编译器优化差异(Debug 与 Release 版本行为不一致)、依赖精确时序的硬件交互等。
程序员据此造出一族物理学梗:Bohrbug(玻尔 bug,条件确定就稳定复现的「好」bug)、Mandelbug(曼德博 bug,成因复杂混沌如分形)、Schrödinbug(薛定谔 bug,代码一直能跑,直到有人发现它理论上不该能跑,随即真的坏掉)。
对付 Heisenbug 需要低干扰观测手段:无侵入追踪、事后核心转储分析、record-replay 录制回放调试、静态分析与竞态检测工具(如 ThreadSanitizer)等,尽量避免观测本身改变时序。

登录 后参与讨论
暂无讨论,来发表第一条评论吧