一句话:提出支持多线程与现代 Java 的动态切片工具 Slicer4J,通过低开销插桩和线程感知动态控制流图计算切片。
动态程序切片广泛用于程序调试与安全分析,但面向 Java 的公开动态切片方案仅有 JavaSlicer,且它只支持 Java 6 及以下版本,也不支持多线程。为此,本文提出新的 Java 动态切片工具 Slicer4J。该工具使用低开销插桩收集运行时执行轨迹,据此构建线程感知的过程间动态控制流图,并基于该图计算切片。为支持跨越 Java 框架方法和 native 代码的切片,Slicer4J 依赖一组预构建的框架方法数据流摘要,同时允许用户按需添加自定义方法进行扩展。作者在十个基准与开源 Java 程序上展示了 Slicer4J 的适用性,并与 JavaSlicer 进行了对比,还讨论了工具的使用与扩展方式。
Dynamic program slicing is used in a variety of tasks, including program debugging and security analysis. Despite being extensively studied in the literature, the only dynamic slicing solution for Java programs that is publicly available today is a tool named JavaSlicer. Unfortunately, JavaSlicer only supports programs written in Java 6 or below and does not support multithreading. To address these limitations, this paper contributes a new dynamic slicing tool for Java, named Slicer4J. Slicer4J uses low-overhead instrumentation to collect a runtime execution trace; it then constructs a thread-aware, inter-procedural dynamic control-flow graph and uses the graph to compute the slice. To support slicing through Java framework methods and native code, Slicer4J relies on a set of pre-constructed data-flow summaries of the main framework methods. It also allows the users to further customize this set, adding user-defined methods when needed. We demonstrate the applicability of Slicer4J on ten benchmark and open-source Java programs, comparing it with JavaSlicer, and discuss how to use and extend the tool.
DOI 原文 ·
@inproceedings{paperbot6444,
title = {Slicer4J: a dynamic slicer for Java},
author = {Khaled Ahmed and Mieszko Lis and Julia Rubin},
booktitle = {FSE},
year = {2021},
doi = {10.1145/3468264.3473123}
}