1. A method of finding an error in a computer program comprising: recording trace data from an execution of the computer program for a time period; setting a plurality of execution breakpoints in the computer program; simulating a portion of the execution of the computer program as recorded in the trace data in the same order with respect to the order in which the trace data was recorded until one of a plurality of conditions is met, wherein one of the plurality of conditions is an attempt to simulate the execution of a machine instruction associated with one of the plurality of execution breakpoints; and inputting a start command to continue simulating a portion of the execution of the computer program as recorded in the trace data in the reverse order with respect to the order in which the trace data was recorded until one of a plurality of conditions is met, wherein one of the plurality of conditions is an attempt to simulate the execution of a machine instruction associated with one of the plurality of execution breakpoints.