Format of the Tracing Messages

## 15.2 Format of the Tracing Messages

All trace messages are output to the debug_output stream.

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

1. The first character shows some properties of the displayed procedure. 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
2. A + displayed here shows that the procedure has a spy point set, and a # shows that the specific call has a break-point set.
3. 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.

4. 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 is 1.

   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.

5. An asterisk before an EXIT means that this procedure is nondeterministic and that it might be resatisfied.
6. 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).
   CALL:
     a procedure is called for the first time concerning a particular invocation;
   DELAY:
     a procedure delays;
   EXIT:
     a procedure succeeds;
   FAIL:
     a procedure fails, there is no (other) solution;
   LEAVE:
     a procedure is left before having failed or exited because an exception was raised by either a built-in predicate error condition or a call to throw/1 or exit_block/1;
   NEXT:
     the next possibly matching clause of a procedure is tried because unification failed or a sub-goal failed;
   ELSE:
     the next branch of a disjunction is tried because some goal in the previous branch failed;
   REDO:
     a procedure that already gave a solution is called again for an alternative;
   RESUME:
     a procedure is woken (the flow enters the procedure box as for a call) because of a unification of a suspending variable.
7. 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.
8. For the tty debugger, the optional module name followed by a colon. Printing of the module can be enabled and disabled by the debugger command m. 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.
9. The goal is printed according to the current instantiations of its variables. Arguments of the form ... represent subterms that are not printed due to the depth limit in effect. The depth limit can be changed using the < command.

   The goal is printed with the current output_mode settings. which can be changed using the o command.

10. 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 is used.