Execution Record and Replay mechanism

The basic idea, is to record the execution (i.e calls) and the various assignments (including of course object creation).

Then, when the user decides, he can replay (and restore the variables and attributes' values) according to the records ...
and then, you can use the EiffelStudio tools to browser, inspect values, and even evaluate expression on those values (be careful, that your expression evaluation won't be recorded ...). When you are done replaying the recorded execution, the "replayer" will revert changes, and should return the system in the same state it was before the user started the replay.

Note that any external calls might introduce erroneous record. For instance if you have a file access, or a socket, or database ... anything which change outside the scope if the Eiffel code, it won't be recorded, and thus won't be replayed.

And the "replayer" is not able to revert a once function to its "unevaluated" state.

Recording

The generated C code contains some calls such to RTDBG.*, those calls will trigger various events such as entering/exiting a feature, or local assignment, attribute assignment ...