Finding the needle: stack traces for GHC

  • Authors:
  • Tristan O.R. Allwood;Simon Peyton Jones;Susan Eisenbach

  • Affiliations:
  • Imperial College, London, United Kingdom;Microsoft Research, Cambridge, United Kingdom;Imperial College, London, United Kingdom

  • Venue:
  • Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
  • Year:
  • 2009

Quantified Score

Hi-index 0.01

Visualization

Abstract

Even Haskell programs can occasionally go wrong. Programs calling head on an empty list, and incomplete patterns in function definitions can cause program crashes, reporting little more than the precise location where error was ultimately called. Being told that one application of the head function in your program went wrong, without knowing which use of head went wrong can be infuriating. We present our work on adding the ability to get stack traces out of GHC, for example that our crashing head was used during the evaluation of foo, which was called during the evaluation of bar, during the evaluation of main. We provide a transformation that converts GHC Core programs into ones that pass a stack around, and a stack library that ensures bounded heap usage despite the highly recursive nature of Haskell. We call our extension to GHC StackTrace.