Time-travel programming: programming language support for interacting with past executions