TY - JOUR
T1 - A Debugger for standard ML
AU - Tolmhch, Andrew
AU - Appel, Andrew W.
N1 - Funding Information:
1 This work was completed while the first author was at Princeton University. A preliminary version of this paper appeared in Proceedings of the 1990 ACM Conference on Lisp and Functional Programming, Nice, France, June 1990. The work was supported, in part, by the National Science Foundation under grants CCR-8806121, CCR-8914570 and CCR-9002786.
PY - 1995/4
Y1 - 1995/4
N2 - We have built a portable, instrumentation-based, replay debugger for the Standard ML of New Jersey compiler. Traditional 'source-level’ debuggers for compiled languages actually operate at machine level, which makes them complex, difficult to port, and intolerant of compiler optimization. For secure languages like ML, however, debugging support can be provided without reference to the underlying machine, by adding instrumentation to program source code before compilation. Because instrumented code is (almost) ordinary source, it can be processed by the ordinary compiler. Our debugger is thus independent from the underlying hardware and runtime system, and from the optimization strategies used by the compiler. The debugger also provides reverse execution, both as a user feature and an internal mechanism. Reverse execution is implemented using a checkpoint and replay system; checkpoints are represented primarily by first-class continuations.
AB - We have built a portable, instrumentation-based, replay debugger for the Standard ML of New Jersey compiler. Traditional 'source-level’ debuggers for compiled languages actually operate at machine level, which makes them complex, difficult to port, and intolerant of compiler optimization. For secure languages like ML, however, debugging support can be provided without reference to the underlying machine, by adding instrumentation to program source code before compilation. Because instrumented code is (almost) ordinary source, it can be processed by the ordinary compiler. Our debugger is thus independent from the underlying hardware and runtime system, and from the optimization strategies used by the compiler. The debugger also provides reverse execution, both as a user feature and an internal mechanism. Reverse execution is implemented using a checkpoint and replay system; checkpoints are represented primarily by first-class continuations.
UR - http://www.scopus.com/inward/record.url?scp=0000142925&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=0000142925&partnerID=8YFLogxK
U2 - 10.1017/S0956796800001313
DO - 10.1017/S0956796800001313
M3 - Article
AN - SCOPUS:0000142925
SN - 0956-7968
VL - 5
SP - 155
EP - 200
JO - Journal of Functional Programming
JF - Journal of Functional Programming
IS - 2
ER -