A Very High Level Debugging Language (thesis)
Abstract:
Programmers spend a significant part of their time debugging,
yet most of them simply add print statements and avoid debugging tools.
Although the user interface of debuggers has improved significantly in the
past decade, their basic debugging methodologies have changed little.
This thesis examines single-process sequential debuggers and attempts
to elucidate their weaknesses. Target-state exploration and
conditional program execution are essential idioms that cannot be
practiced effectively with existing debuggers. State exploration seeks
answers to queries such as detecting a linked list containing a
negative element and finding where that element was added.
Previous work has focussed on the use of source-language interpreters
and graphical interactive exploration as solutions to the
state-exploration problem, but these cannot effectively search for a
negative element in a linked list, specify a search for it, etc. This
thesis describes {it Duel,/} a very high-level language designed
specifically for state exploration in a debugger. {it Duel/} allows
complex state queries to be expressed succinctly and it produces
meaningful output. The traditional C operators are extended to
process sequences of values, and special operators manipulate these
sequences in novel ways. Over a hundred programmers have used {it
Duel/} and their experience substantiates the importance of state
exploration and of the inadequacies in previous approaches.
Conditional execution that detects state changes in complex data
structures is at the crux of advanced debugging, and it is useful to
specify such conditions in {it Duel./} Such use of {it Duel/}
raises important semantic and implementation problems. These problems,
possible solutions, and {it Duel/}extensions are discussed.