Using Sneaky Programmable State Based Debugger

After setting a consistent global breakpoint using Ariadne, we reexecute the program under a deterministic replay system, halt the computation at the breakpoint and examine the state space of the processes. In pC++, we use the Sneaky programmable state based debugger, which acts as a debugging client of the Sneezy program control infrastructure. Sneezy provides the debugging API which Sneaky (a light weight client) uses to examine the state space. Sneaky uses Scheme to build higher levels of debugging abstractions from primitive ones. To illustrate its use, we return to the binary image compression example.

After the breakpoint is reached, we can examine the state of the collection. The figure below shows how the elements in the collection are examined.

[Sneaky session]

Looking at the second element of the collection, we see an inconsistency: myColor was set to 1, indicating that this node represents a single, compressed, black tree. However, myStatus was set to 2, indicating that the merge had failed. Since it is the color of the node that determines its candidacy for merging at the next level, the color should have been set to a third value indicating ``black and white, no merge.'' This failure to set myColor after an unsuccessful merge attempt was the error we were looking for.

We have seen how event and state based debugging are used together to debug the binary image compression program. The integration of Ariadne and Sneaky provides us with an environment for the assessment of mixed event- and state-based debugging strategies and for the evaluation of event-based modeling techniques in an object-parallel programming environment.


Ariadne Overview