A low-overhead framework and associated tools which will allow the recording of executions of applications (both single- and multi-threaded) such that they can be deterministically replayed in the future