Concurrent programs are non-deterministic.
This is a significant obstacle during the debugging cycle, since
an error might not reoccur in a subsequent execution. In this
thesis, approaches for replaying concurrent programs are examined
and the desing and implementation of SMART, the Shared Memory
Application Replaying Tool for uC++ programs is presented.
Replaying is a useful tool because it allows the cyclical
debugging approach to be applied to concurrent applications.
Since concurrent applications are non-deterministic, it may be
hard to recreate an error situation. If the source for
non-determinism is recorded and subsequently reporduced, the
exact order of execution can deterministically be recreated, and
multiple executions of an application for the purpose of
inspection and debugging is possible. SMART is a tool which
records the scheduling activities and exact position of
timeslices in a uC++ application. Based on these data, the
execution of a uniprocessor program can be recreated. Input and
time queries can be an additional sources of non-determinism.
Currently, the user of SMART needs to ensure that these sources
behave in a deterministic fashion.