Table of Contents
Fetching ...

Causal-Consistent Reversible Debugging: Improving CauDEr

Juan José González-Abril, Germán Vidal

TL;DR

The paper addresses debugging of concurrent Erlang programs by adopting causal-consistent reversible debugging to enable back-and-forth exploration from misbehavior. It extends CauDEr from Core Erlang to a substantial subset of source Erlang by redefining both standard and reversible semantics to handle source-language constructs, including higher-order functions and complex control flow, and by integrating user-driven and replay debugging into a single framework. It implements a new CauDEr tool with an improved UI that exposes source-level code and bindings while supporting log-based replay and a unified control model based on a Landauer embedding. The work also discusses the semantic foundations (expression and system layers, global mailbox, happened-before logs, and controlled replay) and outlines future directions such as granularity levels, speculative receive, and distributed error handling.

Abstract

Causal-consistent reversible debugging allows one to explore concurrent computations back and forth in order to locate the source of an error. In this setting, backward steps can be chosen freely as long as they are "causal consistent", i.e., as long as all the actions that depend on the action we want to undo have been already undone. Here, we consider a framework for causal-consistent reversible debugging in the functional and concurrent language Erlang. This framework considered programs translated to an intermediate representation, called Core Erlang. Although using such an intermediate representation simplified both the formal definitions and their implementation in a debugging tool, the choice of Core Erlang also complicated the use of the debugger. In this paper, we extend the framework in order to deal with source Erlang programs, also including some features that were not considered before. Moreover, we integrate the two existing approaches (user-driven debugging and replay debugging) into a single, more general framework, and develop a new version of the debugging tool CauDEr including all the mentioned extensions as well as a renovated user interface.

Causal-Consistent Reversible Debugging: Improving CauDEr

TL;DR

The paper addresses debugging of concurrent Erlang programs by adopting causal-consistent reversible debugging to enable back-and-forth exploration from misbehavior. It extends CauDEr from Core Erlang to a substantial subset of source Erlang by redefining both standard and reversible semantics to handle source-language constructs, including higher-order functions and complex control flow, and by integrating user-driven and replay debugging into a single framework. It implements a new CauDEr tool with an improved UI that exposes source-level code and bindings while supporting log-based replay and a unified control model based on a Landauer embedding. The work also discusses the semantic foundations (expression and system layers, global mailbox, happened-before logs, and controlled replay) and outlines future directions such as granularity levels, speculative receive, and distributed error handling.

Abstract

Causal-consistent reversible debugging allows one to explore concurrent computations back and forth in order to locate the source of an error. In this setting, backward steps can be chosen freely as long as they are "causal consistent", i.e., as long as all the actions that depend on the action we want to undo have been already undone. Here, we consider a framework for causal-consistent reversible debugging in the functional and concurrent language Erlang. This framework considered programs translated to an intermediate representation, called Core Erlang. Although using such an intermediate representation simplified both the formal definitions and their implementation in a debugging tool, the choice of Core Erlang also complicated the use of the debugger. In this paper, we extend the framework in order to deal with source Erlang programs, also including some features that were not considered before. Moreover, we integrate the two existing approaches (user-driven debugging and replay debugging) into a single, more general framework, and develop a new version of the debugging tool CauDEr including all the mentioned extensions as well as a renovated user interface.
Paper Structure (2 sections, 1 equation)

This paper contains 2 sections, 1 equation.