故障定位 (FL) 是软件调试中一个关键但耗时的环节。随着大型语言模型 (LLM) 在代码能力方面的不断提升,对自动化软件开发和维护日益增长的需求促使更多研究人员专注于构建基于 LLM 的故障定位 (LLMFL) 系统。
然而,现有的 LLMFL 技术通常仅限于通过分析静态代码来预测错误位置,而忽略了软件的关键动态程序状态。这种缺乏上下文的情况使得 LLM 容易产生“幻觉”,错误地将无错误的代码识别为可疑代码。
为了解决这个问题,本文引入PingFL,这是第一个结合打印调试技术以实现更准确故障定位的 LLMFL 系统。PingFL 包含一个故障定位 (FL) 代理和一个打印调试 (PD) 代理。
FL 代理的任务是通过一组可调用工具来理解根本原因。当 FL 代理将某个位置指定为可疑时,它将委托 PD 代理通过多轮打印调试来验证可疑问题。特别地,这两个代理通过传递 LLM 生成的文本化思考过程来高效地通信和协作。
在 Defects4J 基准测试中对 812 个真实世界错误进行的评估表明,PingFL 可以在 Top-1 中定位 450 个错误,这明显优于其他基于 LLM 的方法,提高了 41% 到 122%。在跨项目场景中,它也始终超越了传统的 FL 技术。对 PingFL 性能的更深入研究表明,即使没有明确的指令,它也表现出特定的 FL 策略和工具使用模式。最后,PingFL 被证明具有成本效益,每个错误的平均花费为 0.22 美元和 104.62 秒,其中打印调试机制仅占 0.07 美元和 51.62 秒。