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.37 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).