Debugging Standard ML Without Reverse Engineering
We have built a novel and efficient replay debugger for our Standard
ML compiler. Debugging facilities are provided by instrumenting the
user's source code; this approach, made feasible by ML's safety
property, is machine-independent and back-end independent. Replay is
practical because ML is normally used functionally, and our compiler
uses continuation-passing style; thus most of the program's state can
be checkpointed quickly and compactly using
call-with-current-continuation. Together, instrumentation and replay
support a simple and elegant debugger featuring full variable display,
polymorphic type resolution, stack trace-back, breakpointing, and
reverse execution, even though our compiler is very highly optimizing
and has no run-time stack.
- This technical report has been published as
- Debugging Standard ML without reverse engineering.
Andrew P. Tolmach and Andrew W. Appel, Proc. 1990 ACM Conf. on
Lisp and Functional Programming pp. 1-12, June 1990.