I should note that Mozilla's "rr" is actually similar conceptually to the Elm debugger, since it records an input stream rather than a snapshot of the program's states or actions. But the mechanism is quite different, since C++ doesn't naturally isolate nondetermistic "inputs" in the way Elm does.