This section is a reference to the debugger interaction predicates. A
more use-oriented overview of the debugger is in section
2.10.
If you have installed XPCE, you can use the graphical front-end of
the tracer. This front-end is installed using the predicate guitracer/0.
- trace
- Start the tracer. trace/0
itself cannot be seen in the tracer. Note that the Prolog top level
treats trace/0
special; it means‘trace the next goal’.
- tracing
- True if the tracer is currently switched on. tracing/0
itself cannot be seen in the tracer.
- notrace
- Stop the tracer. notrace/0
itself cannot be seen in the tracer.
- notrace(:Goal)
- Call Goal, but suspend the debugger while Goal is
executing. The current implementation cuts the choice points of Goal
after successful completion. See once/1.
Later implementations may have the same semantics as call/1.
- debug
- Start debugger. In debug mode, Prolog stops at spy and break points,
disables last-call optimisation and aggressive destruction of choice
points to make debugging information accessible. Implemented by the
Prolog flag debug.
Note that the min_free
parameter of all stacks is
enlarged to 8 K cells if debugging is switched off in order to
avoid excessive GC. GC complicates tracing because it renames the _<NNN>
variables and replaces unreachable variables with the atom
<garbage_collected>
. Calling nodebug/0
does not reset the initial free-margin because several parts of
the top level and debugger disable debugging of system code regions. See
also set_prolog_stack/2.
- nodebug
- Stop debugger. Implemented by the Prolog flag debug.
See also debug/0.
- debugging
- Print debug status and spy points on current output stream. See also the
Prolog flag debug.
- spy(+Pred)
- Put a spy point on all predicates meeting the predicate specification
Pred. See section
A.23.
- nospy(+Pred)
- Remove spy point from all predicates meeting the predicate specification
Pred.
- nospyall
- Remove all spy points from the entire program.
- leash(?Ports)
- Set/query leashing (ports which allow for user interaction). Ports
is one of +Name, -Name, ?Name or a list
of these.
+Name enables leashing on that port, -Name
disables it and
?Name succeeds or fails according to the current setting.
Recognised ports are
call
, redo
, exit
, fail
and
unify
. The special shorthand all
refers to all
ports,
full
refers to all ports except for the unify port
(default).
half
refers to the call
, redo
and fail
port.
- visible(+Ports)
- Set the ports shown by the debugger. See leash/1
for a description of the Ports specification. Default is
full
.
- unknown(-Old,
+New)
- Edinburgh-Prolog compatibility predicate, interfacing to the ISO Prolog
flag unknown. Values
are
trace
(meaning error
) and fail
.
If the unknown flag
is set to
warning
, unknown/2
reports the value as trace
.
- style_check(+Spec)
- Modify/query style checking options. Spec is one of the terms
below or a list of these.
- +Style enables a style check
- -Style disables a style check
- ?(Style) queries a style check (note the brackets). If Style
is unbound, all active style check options are returned on backtracking.
Loading a file using load_files/2
or one of its derived predicates reset the style checking options to
their value before loading the file, scoping the option to the remainder
of the file and all files loaded
after changing the style checking.
- singleton(true)
- The predicate read_clause/3
(used by the compiler to read source code) warns on variables appearing
only once in a term (clause) which have a name not starting with an
underscore. See section
2.15.1.10 for details on variable handling and warnings.
- no_effect(true)
- This warning is generated by the compiler for BIPs (built-in predicates)
that are inlined by the compiler and for which the compiler can prove
that they are meaningless. An example is using ==/2
against a not-yet-initialised variable as illustrated in the example
below. This comparison is always
false
.
always_false(X) :-
X == Y,
write(Y).
- var_branches(false)
- Verifies that if a variable is introduced in a branch and used
after the branch, it is introduced in all branches. This code
aims at bugs following the skeleton below, where
p(Next)
may be called with Next unbound.
p(Arg) :-
( Cond
-> Next = value1
; true
),
p(Next).
If a variable V is intended to be left unbound, one can
use
V=_
. This construct is removed by the compiler and thus has
no implications for the performance of your program.
This check was suggested together with semantic singleton
checking. The SWI-Prolog libraries contain about a hundred clauses that
are triggered by this style check. Unlike semantic singleton analysis,
only a tiny fraction of these clauses proofed faulty. In most cases, the
branches failing to bind the variable fail or raise an exception or the
caller handles the case where the variable is unbound. The status of
this style check is unclear. It might be removed in the future or it
might be enhanced with a deeper analysis to be more precise.
- discontiguous(true)
- Warn if the clauses for a predicate are not together in the same source
file. It is advised to disable the warning for discontiguous predicates
using the discontiguous/1
directive.
- charset(false)
- Warn on atoms and variable names holding non-ASCII characters that are
not quoted. See also section
2.15.1.1.