Abstract:
Consider the execution of a failing program as a sequence of program states. Each state induces the following state, up to the failure. Which variables and values of a program state are relevant for the failure? We show how the Delta Debugging algorithm isolates the relevant variables and values by systematically narrowing the state difference between a passing run and a failing run—by assessing the outcome of altered executions to determine wether a change in the program state makes a difference in the test outcome. Applying Delta Debugging to multiple states of the program automatically reveals the cause-effect chain of the failure—that is, the variables and values that caused the failure. In a case study, our prototype implementation successfully isolated the cause-effect chain for a failure of the GNU C compiler: “Initially, the C program to be compiled contained an addition of 1.0; this caused an addition operator in the intermediate RTL representation; this caused a cycle in the RTL tree—and this caused the compiler to crash.” Categories and Subject Descriptors
Citations
|
445
|
A survey of program slicing techniques
– Tip
- 1995
|
|
418
|
Algorithmic Program Debugging
– Shapiro
- 1983
|
|
325
|
Dynamically discovering likely program invariants to support program evolution
– Ernst, Cockrell, et al.
- 2001
|
|
219
|
Programmers Use Slices When Debugging
– Weiser
- 1982
|
|
214
|
Dynamic program slicing
– Agrawal, Horgan
- 1990
|
|
149
|
Tracking down software bugs using automatic anomaly detection
– Hangal, Lam
- 2002
|
|
83
|
Algorithm 457. Finding all cliques of an undirected graph
– Bron, Kerbosch
- 1973
|
|
83
|
Automatic program bug location by program slicing
– Lyle, Weiser
- 1987
|
|
68
|
Simplifying and isolating failure-inducing input
– Zeller, Hildebrandt
|
|
66
|
Visualization of test information to assist fault localization
– Jones, Harrold, et al.
- 2001
|
|
65
|
Dynamic slicing of computer programs
– Korel, Laski
|
|
57
|
A new model of program dependences for reverse engineering
– Jackson, Rollins
- 1994
|
|
52
|
Which pointer analysis should i use
– Hind, Pioli
- 2000
|
|
47
|
Subgraph isomorphism, matching relational structures and maximal cliques
– Barrow, Burstall
- 1976
|
|
24
|
An Efficient Relevant Slicing Method for Debugging
– Gyimothy, Beszedes, et al.
- 1999
|
|
21
|
Change impact analysis for object-oriented programs
– Ryder, Tip
- 2001
|
|
21
|
Visualizing memory graphs
– Zimmermann, Zeller
- 2001
|
|
10
|
Automatic isolation of compiler errors
– Whalley
- 1994
|
|
2
|
debugging web site. http://www.st.cs.uni-sb.de/dd
– Delta
|
|
1
|
Automated Debugging
– Zeller
- 2003
|