Program slicing
en.wikipedia.org
en.wikipedia.org
Details on one such example here if anyone is interested: http://www0.cs.ucl.ac.uk/staff/w.emmerich/publications/ICSE2...
Program slicing is especially useful when debugging and reasoning about programs in declarative languages, such as Prolog.
In Prolog, it is natural to think in terms of generalizations and specializations of programs, and you can often explain important program properties such as nontermination and failure by showing relevant fragments of clauses.
See also failure slicing.
In declarative languages, slicing is much more convenient and useful than tracing the execution.