What is Event-Based Debugging?

In the event-based debugging paradigm, the execution of a program is recorded as a sequence of "meaningful" events. These events may be from the system level (memory operations or interprocess message transmisions), or may be user-specified source-level procedure calls. The events are stored in a trace file for use by the debugger.

To begin the debugging process, the user designs a model of the expected program behavior, by describing expected sequences of events with a modeling language. The event-based debugger then compares this model to the recorded trace file, and reports the match (or mismatch) between expected and actual behavior.

Ariadne uses Lamport's happened before (or causality) relation to impose a partial ordering graph on the events in the trace file. The nodes of this graph are events that occur at different threads of execution. The edges of the graph are of two kinds - ones that signify program order, and ones that signify causal order due to inter-process interactions. Ariadne's pattern definition is based on these two relations - two events may be related through a program order edge, or they may be related through an immediate causal order edge. Note the emphasis on the word immediate in causal order: if we wish to follow the causal order, we need to match both the send and receive of a message.