1 mzlib/ a-signature
2 mzlib/ a-unit
3 mzlib/ async-channel
4 mzlib/ awk
5 mzlib/ class
6 mzlib/ class100
7 mzlib/ cm
8 mzlib/ cm-accomplice
9 mzlib/ cmdline
10 mzlib/ cml
11 mzlib/ compat
12 mzlib/ compile
13 mzlib/ contract
14 mzlib/ control
15 mzlib/ date
16 mzlib/ deflate
17 mzlib/ defmacro
18 mzlib/ etc
19 mzlib/ file
20 mzlib/ for
21 mzlib/ foreign
22 mzlib/ include
23 mzlib/ inflate
24 mzlib/ integer-set
25 mzlib/ kw
26 mzlib/ list
27 mzlib/ match
28 mzlib/ math
29 mzlib/ md5
30 mzlib/ os
31 mzlib/ pconvert
32 mzlib/ pconvert-prop
33 mzlib/ plt-match
34 mzlib/ port
35 mzlib/ pregexp
36 mzlib/ pretty
37 mzlib/ process
38 mzlib/ restart
39 mzlib/ runtime-path
40 mzlib/ sandbox
41 mzlib/ sendevent
42 mzlib/ serialize
43 mzlib/ shared
44 mzlib/ string
45 mzlib/ struct
46 mzlib/ stxparam
47 mzlib/ surrogate
48 mzlib/ tar
49 mzlib/ thread
50 mzlib/ trace
51 mzlib/ traceld
52 mzlib/ trait
53 mzlib/ transcr
54 mzlib/ unit
55 mzlib/ unit-exptime
56 mzlib/ unit200
57 mzlib/ unitsig200
58 mzlib/ zip
Bibliography
Index
On this page:
trace
untrace
Version: 4.0.2

 

 (require mzlib/trace)

The mzlib/trace library mimics the tracing facility available in Chez Scheme.

(trace id ...)

Each id must be bound to a procedure in the environment of the trace expression. Each id is set!ed to a new procedure that traces procedure calls and returns by printing the arguments and results of the call. If multiple values are returned, each value is displayed starting on a separate line.

When traced procedures invoke each other, nested invocations are shown by printing a nesting prefix. If the nesting depth grows to ten and beyond, a number is printed to show the actual nesting depth.

The trace form can be used on an identifier that is already traced. In this case, assuming that the variable’s value has not been changed, trace has no effect. If the variable has been changed to a different procedure, then a new trace is installed.

Tracing respects tail calls to preserve loops, but its effect may be visible through continuation marks. When a call to a traced procedure occurs in tail position with respect to a previous traced call, then the tailness of the call is preserved (and the result of the call is not printed for the tail call, because the same result will be printed for an enclosing call). Otherwise, however, the body of a traced procedure is not evaluated in tail position with respect to a call to the procedure.

The result of a trace expression is #<void>.

(untrace id ...)

Undoes the effects of the trace form for each id, set!ing each id back to the untraced procedure, but only if the current value of id is a traced procedure. If the current value of a id is not a procedure installed by trace, then the variable is not changed.

The result of an untrace expression is #<void>.