Abstract:
Although dynamic program slicing was first introduced to aid in user level debugging, applications aimed at improving software quality, reliability, security, and performance have since been identified as candidates for using dynamic slicing. However, the dynamic dependence graph constructed to compute dynamic slices can easily cause slicing algorithms to run out of memory for realistic program runs. In this paper we present the design and evaluation of a cost effective dynamic program slicing algorithm. This algorithm is based upon a dynamic dependence graph representation that is highly compact and rapidly traversable. Thus, the graph can be held in memory and dynamic slices can be quickly computed. A compact representation is derived by recognizing that all dynamic dependences (data and control) need not be individually represented. We identify sets of dynamic dependence edges between a pair of statements that can share a single representative edge. We further show that the dependence graph can be transformed in a manner that increases sharing and sharing can be performed even in the presence of aliasing. Experiments show that transformed dynamic dependence graphs explicitly represent only 6 % of the dependence edges present in the full dynamic dependence graph. When the full graph sizes range from 0.84 to 1.95 Gigabytes in size, our compacted graphs range from 20 to 210 Megabytes in size. Average slicing times for our algorithm range from 1.74 to 36.25 seconds across several benchmarks from SPECInt2000/95.
Citations
|
908
|
Program slicing
– Weiser
- 1984
|
|
672
|
The program dependence graph and its use in optimization
– Ferrante, Ottenstein, et al.
- 1987
|
|
445
|
A survey of program slicing techniques
– Tip
- 1995
|
|
214
|
Dynamic program slicing
– Agrawal, Horgan
- 1990
|
|
59
|
Efficient representations and abstractions for quantifying and exploiting data reference locality
– Chilimbi
- 1995
|
|
57
|
Interprocedural dynamic slicing with applications to debugging and testing
– Kamkar
- 1993
|
|
54
|
Understanding the Backwards Slices of Performance Degrading Instructions
– Zilles, Sohi
- 2000
|
|
33
|
Precise Dynamic Slicing Algorithms
– Zhang, Gupta, et al.
- 2003
|
|
32
|
Improving program slicing with dynamic points-to data
– Mock, Atkinson, et al.
- 2002
|
|
31
|
Rigorous data flow testing through output influences
– Duesterwald, Gupta, et al.
- 1992
|
|
28
|
Experimental Results from Dynamic Slicing of C Programs
– Venkatesh
- 1995
|
|
20
|
Lineartime, incremental hierarchy inference for compression
– Nevill-Manning, Witten
- 1997
|
|
17
|
Hybrid Slicing: An Approach for Refining Static Slices Using Dynamic In formation
– Gupta, Soffa
- 1995
|
|
16
|
Effective Forward Computation of Dynamic Slices Using Reduced Ordered Binary Decision Diagrams
– Zhang, Gupta, et al.
- 2004
|
|
10
|
Debugging with dynamic slicing and backtracking. Software Practice and Ezperience
– Agrawal, DeMillo, et al.
- 1993
|
|
9
|
Evaluation and Comparison of Program Slicing Tools
– Hoffner
- 1995
|
|
8
|
Program Execution Based Module Cohesion Measurement
– Gupta, Rao
- 2001
|
|
8
|
Application of Dynamic Slicing
– Korel, Rilling
- 1997
|
|
7
|
Instruction-isomorphism in program execution
– Sazeides
- 2003
|
|
5
|
Dynamic Slicing Method for Maintenance of Large C
– Beszedes, Gergely, et al.
- 2001
|
|
3
|
A compact execution history for dynamic slicing
– Dhamdhere, Gururaja, et al.
- 2003
|
|
2
|
Distributed Slicing and Partial Re-execution for
– Duesterwald, Gupta, et al.
- 1992
|
|
2
|
Private communication
– Jha
- 2003
|