Declarative debugging

Locating bugs in software is an unavoidable part of software development. Techniques are being developed which can dramatically reduce the time and effort spent on debugging. Traditional debugging techniques are based on the underlying steps in the execution of a program. With high level languages such as logic programming languages the sequence of execution steps can be very complex. However, logic programs not only specify what execution steps are performed; they also specify the logic behind the steps. This logical description of what is to be computed (as opposed to how it is to be computed) is the basis of declarative debugging.

Declarative debugging systems compare the results of sub-computations with what the programmer intended. By asking the programmer questions or using a formal specification the system can identify precisely where in a program a bug is located. Our research into declarative debugging has made improvements over the original algorithms for debugging Prolog and extended the ideas to other language paradigms such as functional and object oriented languages.

Lee Naish, Zoltan Somogyi, and James Harland received a large ARC grant to continue this research until the end of 1998. Bert Thompson was employed under this grant. Zoltan and Lee received another large ARC grant to develop and apply the technology to Mercury. Mark Brown did related work on debugging Mercury and Bernie Pope has been working on debugging Haskell, with some help from summer students Weyn Ong, Toby Ord and Bryn Humberstone.

Some relevant papers:

See also Algorithmic and Automatic Debugging Home Page, Haskell Debugging Technologies