1. A method for recording and replaying execution of an application running on a computer system using a program module, the method comprising: recording events which result from the execution of the application including a non-deterministic event, wherein the program module deterministically records the non-deterministic event; saving the recorded events for deterministic replay of the recorded execution; restoring the saved recorded events; and deterministically replaying the recorded execution of the application.