Hybrid slicing: integrating dynamic information with static analysis

Program slicing is an effective techniqe for narrowing the focus of attention to the relevant parts of a program during the debugging process. However, imprecision is a problem in static slices, since they are based on all possible executions that reach a given program point rather than the specific execution under which the program is being debugged. Dynamic slices, based on the specific execution being debugged, are precise but incur high run-time overhead due to the tracing information that is collected during the program's execution. We present a hybrid slicing technique that integrates dynamic information from a specific execution into a static slice analysis. The hybrid sliceproduced is more precise that the static slice and less costly that the dynamic slice. The technique exploits dynamic information that is readily available during debugging—namely, breakpoint information and the dynamic call graph. This information is integrated into a static slicing analysis to more accurately estimate the potential paths taken by the program. The breakpoints and call/return points, used as reference points, divide the execution path into intervals. By associating each statement in the slice with an execution interval, hybrid slicing provides information as to when a statement was encountered during execution. Another attractive feature of our approach is that it allows the user to control the cost of hybrid slicing by limiting the amount of dynamic information used in computing the slice. We implemented the hybrid slicing technique to demonstrate the feasibility of our approach.

[1]  James R. Larus,et al.  Optimally profiling and tracing programs , 1992, POPL '92.

[2]  Rajiv Gupta,et al.  Distributed Slicing and Partial Re-execution for Distributed Programs , 1992, LCPC.

[3]  Daniel Jackson,et al.  A new model of program dependences for reverse engineering , 1994, SIGSOFT '94.

[4]  Frank Tip,et al.  Parametric program slicing , 1995, POPL '95.

[5]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[6]  Robert H. B. Netzer,et al.  Optimal tracing and incremental reexecution for debugging long-running programs , 1994, PLDI '94.

[7]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[8]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[9]  Rajiv Gupta,et al.  A framework for partial data flow analysis , 1994, Proceedings 1994 International Conference on Software Maintenance.

[10]  Wojtek Kozaczynski,et al.  Automated support for legacy code understanding , 1994, CACM.

[11]  Keith D. Cooper,et al.  Analyzing aliases of reference formal parameters , 1985, POPL.

[12]  David Binkley,et al.  Unravel:: a case tool to assist evaluation of high integrity software , 1995 .

[13]  Jong-Deok Choi,et al.  Static slicing in the presence of goto statements , 1994, TOPL.

[14]  Jong-Deok Choi,et al.  Techniques for debugging parallel programs with flowback analysis , 1991, TOPL.

[15]  Hiralal Agrawal On slicing programs with jump statements , 1994, PLDI '94.

[16]  Janusz W. Laski,et al.  Dynamic Program Slicing , 1988, Inf. Process. Lett..

[17]  G. A. Venkatesh,et al.  The semantic approach to program slicing , 1991, PLDI '91.

[18]  Thomas W. Reps,et al.  Precise interprocedural chopping , 1995, SIGSOFT FSE.

[19]  Peter Fritzson,et al.  Three approaches to interprocedural dynamic slicing , 1993, Microprocess. Microprogramming.

[20]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[21]  Joseph Robert Horgan,et al.  Dynamic program slicing , 1990, PLDI '90.