Abstract
Lazy functional languages are declarative and allow the programmer to write programs where operational issues such as the evaluation order are left implicit. This should be reflected in the design of debuggers for such languages to avoid burdening the programmer with operational details, e.g. concerning the actual evaluation order. Conventional debugging techniques tend to focus too much on operational aspects to be suitable in this context. A record of the execution that only captures the declarative aspects of the execution, leaving out operational details, would be a viable basis for debugging lazy functional programs. Various declarative debugging tools could then be developed on top of such records. In this paper we propose a structure which we call the Evaluation Dependence Tree (EDT) for this purpose, and we describe two different construction methods. Performance problems are discussed along with possible solutions.
Similar content being viewed by others
References
Mireille Ducassé. An Extendable Trace Analyser to Support Automated Debugging. PhD thesis, University of Rennes I, Campus de Beaulieu, 35042 Rennes cedex, France, June 1992. Numéro d'ordre 758. European Doctorate. In English.
Cordelia V. Hall and John T. O'Donnell. Debugging in a side effect free programming environment. In Proceedings of the ACM SIGPLAN 85 Symposium on Language Issues in Programming Environments, pages 60–68, Seattle, Washington, June 1985. Proceedings published in ACM SIGPLAN Notices 20(7).
Paul Hudak and Joseph H. Fasel. A gentle introduction to Haskell. ACM SIGPLAN Notices, 27(5), May 1992.
Paul Hudak, Simon L. Peyton Jones, Philip Wadler, Brian Boutel, Jon Fairbairn, Joseph Fasel, María M. Guzmán, Kevin Hammond, John Hughes, Thomas Johnsson, Dick Kieburtz, Rishiyur Nikhil, Will Partain, and John Peterson. Report on the programming language Haskell. ACM SIGPLAN Notices, 27(5), May 1992. Version 1.2.
Samuel Kamin. A debugging environment for functional programming in Centaur. Research report, Institut National de Recherche en Informatique et en Automatique (INRIA), Domaine de Voluceau, Rocquencourt, B.P.105, 78153 Le Chesnay Cedex, France, July 1990.
Amir Kishon and Paul Hudak. Semantics directed program execution monitoring. Journal of Functional Programming, 5(4):501–547, October 1995.
Lee Naish and Tim Barbour. Towards a portable lazy functional declarative debugger. Technical Report 95/27, Department of Computer Science, University of Melbourne, Australia, 1995.
Henrik Nilsson. A declarative approach to debugging for lazy functional languages. Licentiate Thesis No. 450, Department of Computer and Information Science, Linköping University, S-581 83, Linköping, Sweden, September 1994.
Henrik Nilsson and Peter Fritzson. Algorithmic debugging for lazy functional languages. Journal of Functional Programming, 4(3):337–370, July 1994.
Henrik Nilsson and Jan Sparud. The evaluation dependence tree: an execution record for lazy functional debugging. Research Report LiTH-IDA-R-96-23, Department of Computer and Information Science, Linköping University, S-581 83, Linköping, Sweden, August 1996.
John T. O'Donnell and Cordelia V. Hall. Debugging in applicative languages. Lisp and Symbolic Computation, 1(2):113–145, 1988.
Simon L. Peyton Jones. The Implementation of Functional Programming Languages. Prentice Hall, 1987.
Ehud Y. Shapiro. Algorithmic Program Debugging. MIT Press, May 1982.
Jan Sparud. A transformational approach to debugging lazy functional programs. Licentiate Thesis, Department of Computing Science, Chalmers University of Technology, S-412 96, Göteborg, Sweden, February 1996.
Günter Specht. Generating explanation trees even for negations in deductive database systems. In Proceedings of the 5th Workshop on Logic Programming Environments, pages 8–13, Vancouver, Canada, October 1993.
Andrew Tolmach and Andrew W. Appel. A debugger for Standard ML. Journal of Functional Programming, 5(2):155–200, April 1995.
Author information
Authors and Affiliations
Rights and permissions
About this article
Cite this article
Nilsson, H., Sparud, J. The Evaluation Dependence Tree as a Basis for Lazy Functional Debugging. Automated Software Engineering 4, 121–150 (1997). https://doi.org/10.1023/A:1008681016679
Issue Date:
DOI: https://doi.org/10.1023/A:1008681016679