OpenAI工程师通过识别两个不同的原因,解决了其Rockset数据基础设施中无法解释的C++崩溃问题:Azure主机上的静默硬件损坏以及GNU libunwind中存在的一个18年历史的竞态条件。
- 这些崩溃涉及函数返回到虚假地址或栈指针未对齐的情况,这与标准的软件调试假设相悖。
- 由于缺乏证据,初步分析排除了应用程序代码错误、编译器问题以及内核信号传递问题。
- 研究人员利用核心转储和x86_64红区来保存非活动栈帧,以便进行详细的崩溃后分析。
- 在分析了群体级别的崩溃数据而非孤立实例后,调查方向从单一原因转向了两个无关的bug。
这种方法表明,将崩溃视为流行病学问题,可以使工程师识别出传统调试方法所遗漏的罕见且复杂的故障。