近年来,人们已经投入了大量精力来自动化软件调试,这是一个耗时的过程,涉及故障定位和修复生成。最近,大型语言模型(LLM)在自动调试方面显示出了巨大潜力。然而,我们发现传统和基于LLM的调试工具面临着三个挑战:1)故障定位的上游不完美会影响下游的修复;2)处理复杂逻辑错误的不足;3)忽略程序上下文。在这种情况下,我们提出了第一个自动化的、统一的调试框架——FixAgent,通过LLM代理协同作用。FixAgent可以执行端到端的故障定位、修复和分析。我们的想法是,LLM可以从人类开发人员在调试中认可的通用软件工程原则中受益,如橡皮鸭调试,从而更好地理解程序功能和逻辑错误。因此,我们创建了三个受橡皮鸭调试启发的设计来解决这些挑战。它们是代理专业化和协同作用、关键变量跟踪和程序上下文理解,这些要求LLM提供明确的解释,并迫使它们关注关键的程序逻辑信息。在广泛使用的QuixBugs数据集上的实验表明,FixAgent正确修复了80个中的79个错误,其中有9个以前从未被修复过。即使没有故障位置信息和少于0.6%的采样时间,它也比CodeFlaws上表现最佳的修复工具更可信地修补了1.9倍的缺陷。平均而言,FixAgent相对于使用不同LLM的基础模型平均增加了约20%的可信和正确的修复,显示出我们设计的有效性。此外,FixAgent的正确率达到了惊人的97.26%,表明FixAgent有可能克服现有方法的过度拟合问题。
提问交流