并非崩溃:用AI调试CI
一位开发者花费数小时调试一个CI冒烟测试,该测试错误地报告了崩溃。通过使用AI和定制的崩溃捕获工具包,他们发现进程正常退出,但测试误解了信号。
在更新个人项目Kinjo的依赖项时,一位开发者遭遇了一个令人困惑的CI测试失败。Kinjo是一个用于在终端界面浏览本地DNS-SD和mDNS服务的工具。其CI套件包含一个冒烟测试:在tmux中启动Kinjo,发送一些按键,然后检查其是否正常退出。然而,测试间歇性地报告“drive-tui: pane exited via a signal (no exit code)”,暗示发生了崩溃。
开发者最初认为Kinjo确实崩溃了,但经过数小时的排查——包括多次AI会话、多个被丢弃的假设以及开发一个小型崩溃捕获工具包——他们发现Kinjo实际上成功退出了。问题的核心在于测试如何解释进程的退出状态。当tmux窗格因信号而退出时,测试会将其标记为崩溃,但Kinjo在某些情况下会以信号退出的方式正常结束。
开发者利用AI工具生成和分析多种假设,从资源竞争到库版本问题,但最终通过自定义工具捕获了真实的退出序列。他们意识到,需要区分由信号导致的意外退出和有意使用的信号。于是,他们改进了测试脚本,使其能够正确识别正常退出,从而避免了误报。这次经历不仅修复了CI测试,还加深了对进程退出行为的理解。