14.2 Format of the Tracing Messages
All trace messages are output to the
The format of one trace line is as follows:
S+(4) 2 *EXIT<5> module:foo(one, X, two) %>
12 3 4 5 6 7 8 9 10
The first character shows some properties of the
It may be one of
C - an external procedure, not implemented in Prolog
- S - a skipped procedure, i.e. a procedure whose
subgoals are not traced
- A '+' displayed here shows that the procedure has a spy point set.
- The number between parentheses shows the box invocation number
of this procedure call. Since each box has a unique invocation
number, it can be used to identify ports that belong to the same box.
It also shows how many procedure redos have been made since the
beginning of the query. Only boxes that can be traced obtain an
invocation number, for instance subgoals of a procedure which is
compiled in debug mode or has its skip-flag set are not numbered.
When a delayed goal is resumed, it keeps the invocation number it was
assigned when it delayed. This makes it easy to follow all ports of a
specified call even in data-driven computation.
- The second number shows the level or depth of the goal,
i.e. the number of its ancestor boxes. When a subgoal is called, the
level increases and after exit it decreases again. The initial level
Since a resumed goal is considered to be a descendant of the procedure
that woke it, the level of a resumed goal may be different from
the level the goal had when it delayed.
- An asterisk before an EXIT means that this
procedure is nondeterministic and that it might be resatisfied.
- The next word is the name of the port.
It might be missing if the displayed goal is not the current position
in the execution (e.g. when examining ancestors or delayed goals).
- a procedure is called for the first time concerning a particular
- a procedure delays,
- a procedure succeeds,
- a procedure fails, there is no (other) solution,
- a procedure is left before having failed or exited because
of a call to exit_block/1,
- the next possibly matching clause of a procedure is tried
because unification failed or a sub-goal failed,
- the next branch of a disjunction is tried because some goal
in the previous branch failed.
- a procedure that already gave a solution is called again for
- a procedure is woken (the flow enters the procedure box as for
a call) because of a unification of a suspending variable,
- This only appears if the goal is executing at a different priority
than 12, the normal priority. The number between the angled brackets
shows the priority (between 1 and 11) that the goal is executed at.
- For the tty debugger, the optional module name followed by a colon.
Printing of the module can be enabled and disabled by the debugger
If it is enabled, the module from where the procedure is called is
displayed. By default the module printing is disabled. With tkeclipse, the
module name is not displayed with the traceline, instead, you can get the
information by right holding the mouse button over the trace line in the
call stack window.
- The goal is printed according to the current instantiations
of its variables. Arguments of the form ... represent subterm
that are not printed due to the depth limit in effect.
The depth limit can be changed using the
The goal is printed with the current output_mode settings.
which can be changed using the
- The prompt of the debugger, which means that it is waiting
for a command from the user. Note there is no prompt when tkeclipse tracer