Most work on program slicing to date has concentrated on finding slices of programs involving only scalar variables. Pointers and composite variables do not lend themselves well to static analysis, especially when the language involved is not strongly-typed. When debugging a program, however, we are interested in analyzing the program behavior for test cases that reveal a fault. In this paper, we present a uniform approach to handling pointers and composite variables such as arrays, records, and unions for the purpose of obtaining dynamic program slices. Programmers spend considerable time debugging code.
Symbolic debuggers provide some help but the task still remains complex and difficult.
Other than breakpoints and tracing. Programmers must perform many tasks manually that the tools could perform automatically, just as finding which statements in the program affect the value of an output variable under a given test case, what was the value of a given variable when the control last reached a given program location, and what does the program do differently under one test case that it does not do under another. If the debugging tools provided explicit support for such tasks, the whole debugging process would be automated to a large extent. In this dissertation, we propose a new debugging paradigm that easily lends itself to automation. Two tasks in this paradigm translate into techniques called dynamic program slicing and execution backtracking.