CSI: Haskell - Tracing Lazy Evaluations in a Functional Language
Paper in proceeding, 2024

In non-strict languages such as Haskell the execution of individual expressions in a program significantly deviates from the order in which they appear in the source code. This can make it difficult to find bugs related to this deviation, since the evaluation of expressions does not occur in the same order as in the source code. At the moment, Haskell errors focus on values being produced, whereas it is often the case that faults are due to values being consumed. For non-strict languages, values involved in a bug are often generated immediately prior to the evaluation of the buggy code. This creates an opportunity for evaluation traces, tracking recently evaluated locations (which can deviate from call-order) to help establish the origin of values involved in faults. In this paper, we describe an extension of GHC’s Haskell Program Coverage with evaluation traces, recording recent evaluations in the coverage file, and reporting an evaluation trace alongside the call stack on exception. This lets us reconstruct the chain of events and locate the origin of faults. As a case study, we applied our initial implementation to the nofib-buggy data set and found that some runtime errors greatly benefit from trace information.

Fault-Localization

Errors

Laziness

Tracing

Author

Matthías Páll Gissurarson

Chalmers, Computer Science and Engineering (Chalmers), Information Security

Leonhard Applis

Delft University of Technology

IFL '23: Proceedings of the 35th Symposium on Implementation and Application of Functional Languages

Vol. 1 1 1-13 1
979-8-4007-1631-7 (ISBN)

Implementation and Application of Functional Languages
Braga, Portugal,

Areas of Advance

Information and Communication Technology

Subject Categories

Software Engineering

Computer Science

DOI

10.1145/3652561.3652562

More information

Latest update

7/23/2024