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

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.

Laziness

Tracing

Fault-Localization

Errors

Författare

Matthías Páll Gissurarson

Chalmers, Data- och informationsteknik, Informationssäkerhet

Leonhard Applis

TU Delft

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

1 1
979-8-4007-1631-7 (ISBN)

Implementation and Application of Functional Languages
Braga, Portugal,

Styrkeområden

Informations- och kommunikationsteknik

Ämneskategorier

Programvaruteknik

Datavetenskap (datalogi)

DOI

10.1145/3652561.3652562

Mer information

Senast uppdaterat

2024-10-07