论文

DebugRepair:通过自引导调试增强基于 LLM 的自动化程序修复

DebugRepair: Enhancing LLM-Based Automated Program Repair via Self-Directed Debugging

摘要

自动程序修复(APR)受益于大语言模型(LLM)的代码理解和生成功能。现有的基于反馈的 APR 方法使用测试执行反馈迭代地完善候选补丁,并显示出有希望的结果。然而,大多数依赖于结果级故障症状,例如堆栈跟踪,它显示如何观察故障,但无法公开对于根本原因分析至关重要的中间运行时状态。因此,LLM 经常在没有足够的运行时证据的情况下推断错误原因,从而导致错误的补丁。为了解决这个限制,我们提出了 DebugRepair,一个基于 LLM 的 APR 的自引导调试框架。 DebugRepair 通过模拟调试收集的中间运行时证据增强了补丁的细化。它由三个组件组成:测试语义纯化、模拟仪器和调试驱动的对话修复。它们共同减少了嘈杂的测试上下文,通过具有基于规则的回退的目标调试语句收集运行时跟踪,并使用先前的尝试和新观察到的运行时状态逐步完善候选补丁。我们在 Java 和 Python 的三个基准测试上评估 DebugRepair。实验表明 DebugRepair 针对 15 种方法实现了最先进的性能。使用 GPT-3.5,它正确修复了 Defects4J 上的 224 个错误,比之前基于 SOTA LLM 的方法高出 26.2%。使用 DeepSeek-V3,它正确修复了 295 个 Defects4J 错误,比第二好的基线多了 59 个错误。在另外五个主干 LLM 中,DebugRepair 的修复性能比普通设置提高了 51.3%。消融研究进一步证实了所有成分的有效性。