Rust编程语言因其强大的安全特性和内存管理能力而受到了广泛关注。尽管Rust程序具有内存安全性的保证,但仍然存在无法管理的运行时错误,即panic错误。值得注意的是,rustc(Rust自己的编译器)中超过一半的错误都可以归因于由panic错误引起的崩溃。然而,理解根本原因并解决这些panic错误通常需要大量的努力,因为提供的信息有限,堆栈回溯可能非常复杂,通常省略了实际的错误位置。虽然存在许多自动程序修复技术,但我们观察到,由于语言机制的自然差异,主流的修复模式不容易适用于Rust程序。为了解决上述挑战,本文介绍了一项系统性研究,旨在修复Rust panic错误。我们首先组装了一个数据集,即Panic4R,其中包括来自前500个最常下载的开源crate的102个真实panic错误和它们的修复。通过分析Rust的实现,我们确定了修复panic错误的Rust特定模式,这可以帮助理解并为生成补丁提供指导。最后,我们设计并实现了第一个用于Rust panic错误的自动修复工具PanicKiller,它可以在真实的大规模数据集上有效地生成正确的补丁,并已经协助解决了28个开源项目中的panic错误。每个解决的问题都经过了开发人员的验证并合并到了相应的代码库中。
提问交流