Debugging High Level Specifications

A specification for an application is a program like any other, and is consequently subject to various types of error. Some of these could perhaps be identified and corrected by inspection. However, particularly when specifications get large, a debugger of some sort would be needed. However, application generators typically don't come with any debugging support.

The current approach to debugging specifications written in domain-specific languages is quite unpleasant: the code generated by the AG (often in a language such as C) forms the basis of the debugging efforts. A conventional symbolic debugger such as SDB or GDB is used to debug the generated application; the user has to manually perform the mapping between the generated C source code displayed by the symbolic debugger and the original specification. This certainly involves mapping from a particular line in the generated source code to a particular line (or part there of) in the original specification. In addition, the data models for the specification language and C are probably quite different; the specification language may provide data abstractions and operations that are suitable for the application domain, but are quite different the data types of C. The user debugging at the C level has to learn how the AG implements these data abstractions in C. To complicate matters, AG may also ``mangle'' the identifiers used in the specification language in various ways to avoid name conflicts and/or encode different types of information; this is an additional burden. The drudgery of this type of debugging represents an important challenge for AG technology.

One solution to this problem is to implement a customized domain-specific debugger, from scratch, specifically designed for the particular specification language; such a debugger would be congnizant of the syntax and semantics of the specification language. The user would be able to debug a specification with the application in terms of its particular execution and data model. The cost of building just a debugger, however, makes this approach suitable only for AG's that have wide market penetration, and are used to build very large and complex applications.

I am interested in developing systematic methods of adapting existing symbolic debuggers such as GDB to create domain-specific debuggers. Tools such as GDB have embedded in them many of the basic functionality of debugging: user interface, reading symbol tables from object files and executables, operating in a ``master/slave'' configuration with another process, reading/modifying/displaying data, setting up various types of breakpoints etc. The research challenge here is to develop tools and techniques for the systematic adaptation of existing symbolic debuggers to create debuggers for particular domain specification languages.