一句话:将增量调试中的输入归约建模为依赖图归约,提出 Binary Reduction 算法与 J-Reduce 工具,加速 Java 字节码归约。
增量调试可将触发失败的输入缩减为较小输入,从而揭示失败原因,已用于 C 程序、XML 数据和线程调度等。但对于包含大量内部依赖的输入,例如 C#、Java 和 Java 字节码,增量调试的可扩展性很差。本文指出其核心挑战是依赖图上的归约问题,并提出一种通用的依赖图归约策略,结合新的 Binary Reduction 算法,在面向 Java 字节码的工具 J-Reduce 中实现。实验表明,与增量调试相比,该工具平均快 12 倍且归约效果更好,并据此为三个 Java 字节码反编译器生成并提交了简短的错误报告。
Delta debugging is a technique for reducing a failure-inducing input to a small input that reveals the cause of the failure. This has been successful for a wide variety of inputs including C programs, XML data, and thread schedules. However, for input that has many internal dependencies, delta debugging scales poorly. Such input includes C#, Java, and Java bytecode and they have presented a major challenge for input reduction until now. In this paper, we show that the core challenge is a reduction problem for dependency graphs, and we present a general strategy for reducing such graphs. We combine this with a novel algorithm for reduction called Binary Reduction in a tool called J-Reduce for Java bytecode. Our experiments show that our tool is 12x faster and achieves more reduction than delta debugging on average. This enabled us to create and submit short bug reports for three Java bytecode decompilers.