TRACERJD: Generic trace-based dynamic dependence analysis with fine-grained logging

We present the design and implementation of TRACERJD, a toolkit devoted to dynamic dependence analysis via fine-grained whole-program dependence tracing. TRACERJD features a generic framework for efficient offline analysis of dynamic dependencies, including those due to exception-driven control flows. Underlying the framework is a hierarchical trace indexing scheme by which TRACERJD maintains the relationships among execution events at multiple levels of granularity while capturing those events at runtime. Built on this framework, several application tools are provided as well, including a dynamic slicer and a performance profiler. These example applications also demonstrate the flexibility and ease with which a variety of client analyses can be built based on the framework. We tested our toolkit on four Java subjects, for which the results suggest promising efficiency of TRACERJD for its practical use in various dependence-based tasks.

[1]  Xiangyu Zhang,et al.  Precise dynamic slicing algorithms , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[2]  Rajiv Gupta,et al.  A system for debugging via online tracing and dynamic slicing , 2012, Softw. Pract. Exp..

[3]  Xiangyu Zhang,et al.  Whole execution traces and their applications , 2005, TACO.

[4]  Nicholas Nethercote,et al.  Valgrind: A Program Supervision Framework , 2003, RV@CAV.

[5]  Laurie Hendren,et al.  Soot: a Java bytecode optimization framework , 2010, CASCON.

[6]  Tao Wang,et al.  Using compressed bytecode traces for slicing Java programs , 2004, Proceedings. 26th International Conference on Software Engineering.

[7]  Feng Li,et al.  Dependence-based multi-level tracing and replay for wireless sensor networks debugging , 2011, LCTES '11.

[8]  Rajiv Gupta,et al.  Unified control flow and data dependence traces , 2007, TACO.

[9]  Vikram S. Adve,et al.  Using likely invariants for automated software fault localization , 2013, ASPLOS '13.

[10]  Xiangyu Zhang,et al.  Enabling tracing Of long-running multithreaded programs via dynamic execution reduction , 2007, ISSTA '07.

[11]  Xiangyu Zhang,et al.  Whole Execution Traces , 2004, 37th International Symposium on Microarchitecture (MICRO-37'04).

[12]  Sanjay Bhansali,et al.  Framework for instruction-level tracing and analysis of program executions , 2006, VEE '06.

[13]  Lori A. Clarke,et al.  A Formal Model of Program Dependences and Its Implications for Software Testing, Debugging, and Maintenance , 1990, IEEE Trans. Software Eng..

[14]  Gregg Rothermel,et al.  Interprocedural control dependence , 2001, TSEM.

[15]  Gregg Rothermel,et al.  Supporting Controlled Experimentation with Testing Techniques: An Infrastructure and its Potential Impact , 2005, Empirical Software Engineering.

[16]  Raúl A. Santelices,et al.  DUA-forensics: a fine-grained dependence analysis and instrumentation framework based on Soot , 2013, SOAP '13.

[17]  Xiangyu Zhang,et al.  Cost effective dynamic program slicing , 2004, PLDI '04.

[18]  Raúl A. Santelices,et al.  Diver: precise dynamic impact analysis using dependence-based trace pruning , 2014, ASE.