# Tracing LFE Functions

Eric Bailey

Written on 12 April, 2016

Updated on 18 December, 2023

Tags: lfe, lisp, beam, tracing, debugging

What follows is an LFE translation of Roberto Aloi's *Tracing Erlang Functions*.

Tracing LFE functions for debugging purposes is quite simple.

Let's say you have the following module and want to trace one of its functions.

(defmodule maths (export (sum 2) (diff 2))) (defun sum (a b) (+ a b)) (defun diff (a b) (- a b))

Before we get started, make sure you compile the `maths`

module:

```
(c "/path/to/maths.lfe")
```

Just start the tracer:

(dbg:tracer)

#(ok <0.46.0>)

Tell the tracer you are interested in all calls for all processes:

(dbg:p 'all 'c)

#(ok (#(matched nonode@nohost 26)))

Finally, tell it you want to trace the function, `sum`

, from the `maths`

module:

(dbg:tpl 'maths 'sum [])

#(ok (#(matched nonode@nohost 1)))

Now, try to call the function, as usual. The tracer is active!

(maths:sum 2 3)

5 (<0.29.0>) call maths:sum(2,3)

To trace all functions from the `maths`

module:

> (dbg:tpl 'maths [])

To trace the return value for a given function:

```
(dbg:tpl 'maths 'sum (match-spec ([_] (return_trace))))
```

#(ok (#(matched nonode@nohost 1) #(saved 1)))

(maths:sum 19 23)

42 (<0.56.0>) call maths:sum(19,23) (<0.56.0>) returned from maths:sum/2 -> 42

To stop the trace:

(dbg:stop)

ok