|
Abstract : |
We are developing an interactive debugger with reverse execution for the language Standard ML extended to include concurrent threads in the style of Modula-2+. Our debugging approach is based on automatic instrumentation in the source language of the user's source code; this makes the debugger completely independent of the compiler back-end, run-time system, and target hardware. The debugger operates entirely inside the concurrency model and has no special concurrency privileges. In this paper, we consider some of the challenges of debugging a non-deterministic concurrent symbolic language "in itself. " Issues considered include logging nondeterministic activity, obtaining more secure semantics for our concurrency primitives, controlling distributed computations, and defining suitable time models. We conclude by suggesting an alternative simulation-based approach to dealing with non-determinism. 1 Debugging Standard ML Standard ML [22] is a general purpose programming language featuring first-class functions, strong typing with polymorphism, and a powerful exception mechanism. Normal programming style in ML is mostly functional, but the language also supports the creation and manipulation of mutable objects (ref cells). Our highly optimizing compiler for the language, Standard ML of New Jersey (SML-NJ) [1], also supports mutable arrays and first-class continuations [7]. ML's compile-time type-checking guarantees that programs have no run-time insecurities ("core is never dumped"). This means that one can always study the run-time behavior of a program---even a buggy one---from inside the language, without reference to the un-, |