Port denotes the reason to activate the tracer (`port' in the 4/5-port, but with some additions:
redo
port signals resuming a predicate to generate
alternative solutions.retry
. Except is the pending exception-term.break
instruction is executed. PC is program
counter. This port is used by the graphical debugger.cut_call(PC)
for more
information.
Frame is a reference to the current local stack frame,
which can be examined using prolog_frame_attribute/3. Choice
is a reference to the last choice-point and can be examined using
prolog_choice_attribute/3. Action
should be unified with one of the atoms continue
(just
continue execution), retry
(retry the current goal) or fail
(force the current goal to fail). Leaving it a variable is identical to continue
.
Together with the predicates described in section 4.38 and the other predicates of this chapter this predicate enables the Prolog user to define a complete new debugger in Prolog. Besides this it enables the Prolog programmer monitor the execution of a program. The example below records all goals trapped by the tracer in the database.
prolog_trace_interception(Port, Frame, _PC, continue) :- prolog_frame_attribute(Frame, goal, Goal), prolog_frame_attribute(Frame, level, Level), recordz(trace, trace(Port, Level, Goal)).
To trace the execution of `go' this way the following query should be given:
?- trace, go, notrace.
very_deep
(meaning don't skip). The `skip level' is a
global variable of the Prolog system that disables the debugger on all
recursion levels deeper than the level of the variable. Used to
implement the trace options `skip' (sets skip level to the level of the
frame) and `up' (sets skip level to the level of the parent frame (i.e.,
the level of this frame minus 1).