- 非确定性bug更难调试,因为它们需要重复执行,并且通常涉及在崩溃之前发生的数据损坏。
- 在Redis gem升级导致Buildkite的CI系统中出现不稳定测试后,在redis-client库中发现了该bug。
- 团队使用Test Engine关联测试可靠性,使用核心转储检查崩溃状态,并使用ASAN识别hiredis C扩展中的堆释放后使用(heap use-after-free)。
- 修复方案包括禁用Redis连接的C扩展,并向上游报告该问题。
- 调试过程结合了技能、团队合作和运气,工具能够检测到内存损坏,否则修复可能需要数月时间。