The design of debugging tools is often ad hoc, with tools tailor-made
for specific target languages and operating systems. Consequently, no
unified theory of debugger design has emerged. Especially neglected is
the design of languages to control debugging activities-and fundament
al issues that arise in the implementation and use of such languages.
We introduce GDL, a powerful low-level debugging language whose primit
ives capture the intuitive, informal semantics used in imperative debu
gging. GDL can be extended to incorporate higher-level constructs, hen
ce we use it as our vehicle to examine central semantic issues that co
nfront designers and implementers of debugging languages. We gauge the
efficiency of various GDL constructs on typical architectures and hig
hlight semantic issues arising from the integration of those mechanism
s. Our exploration of semantic issues is intended to provide guidance
for designers of debugging languages, to ensure all high-level languag
e features can be mapped cleanly and efficiently onto underlying archi
tectural hooks, without endangering the semantic integrity of those hi
gh-level constructs.