Modern software systems rarely run as a single, sequential program. They are /concurrent/: many activities run at the same time, often across several processors or machines in the cloud, and they communicate by exchanging messages. Concurrency is essential for performance and responsiveness, but it makes software failures harder to understand and reproduce. A bug may appear only under a particular “interleaving” of events, such as a rare ordering of message deliveries or scheduling decisions.
The ReGraDe-CS project (Reversible Gray Debugging of Concurrent Systems) tackles this challenge by establishing foundations for /reversible debugging/ of concurrent programs: the ability to inspect an execution, move backwards (rollback), and run forwards (replay). In concurrency, reversing an execution cannot be done naively, because actions in different components are linked by cause-and-effect relations (for example, receiving a message depends on a prior message being sent). A correct reversible debugger must respect these dependencies (causal consistency).
The project’s objective is to deliver a mathematically well-founded account of reversible debugging for concurrent systems, with a general, reusable semantic theory. The aim is to make “time-travel debugging” for concurrency precise and compositional, in order to be used for message-passing and actor-style languages (such as Erlang) that used in practice to implement large-scale distributed systems.