Port is one of call
, redo
, exit
, fail
or
unify
. Frame is an integer reference to the
current local stack frame. PC is the current value of the
program-counter, relative to the start of the current clause, or 0 if it
is invalid, for example because the current frame runs a foreign
predicate, or no clause has been selected yet. 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 3.39 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).