Algebraic specifications have been used successfully as a formal basis for software development. This paper discusses how the origin and dynamic dependence relations implicitly defined by an algebraic specification can be used to define powerful language-specific tools. In particular, the generation of tools for source-level debugging and dynamic program slicing from specifications of interpreters will be addressed.