We are focusing on techniques to aid the debugging of multi-threaded
Java applications. Debugging such applications is usually quite
difficult because of synchronization race conditions. Hence, some special
techniques must be applied if one wants to repeat the outcome of the
races.
In this paper, we describe such a technique, i.e. performing a
controlled replay of a multi-threaded Java application. We eliminate
the non-determinism during the replay of the application by imposing
order on the synchronization operations executed, as traced during the
recorded execution of the application.
Since Java is portable, we want the record/replay system to be at
least as portable. Thus, we propose to implement everything in Java,
with no or very small changes to the Java Virtual Machine used.