In this article we describe a new layered model for building debugging
and monitoring tools. The model separates the different functionaliti
es of these tools into a number of well-defined layers and defines sta
ndardized interfaces between these layers. Individual layers can be im
plemented independently. Lower layers hide the operating system and ar
chitecture dependencies from the higher layers, thus allowing the same
higher layers to be used on different systems. On the other hand, the
same lower layers can be shared by similar tools, each of which might
have a different implementation of the high-level functions. We have
built a working implementation of this model and working prototype deb
uggers, profilers, and data tracers that use this model.