The CHR debugging facilities are currently
rather limited. Only tracing is currently available. To use the CHR
debugging facilities for a CHR file it must be compiled for debugging.
Generating debug info is controlled by the CHR option debug
,
whose default is derived from the SWI-Prolog flag generate_debug_info
.
Therefore debug info is provided unless the -nodebug is
used.
For CHR constraints the four standard ports
are defined:
- call
-
A new constraint is called and becomes active.
- exit
-
An active constraint exits: it has either been inserted in the store
after trying all rules or has been removed from the constraint store.
- fail
-
An active constraint fails.
- redo
-
An active constraint starts looking for an alternative solution.
In addition to the above ports, CHR constraints have five additional
ports:
- wake
-
A suspended constraint is woken and becomes active.
- insert
-
An active constraint has tried all rules and is suspended in the
constraint store.
- remove
-
An active or passive constraint is removed from the constraint store, if
it had been inserted.
- try
-
An active constraints tries a rule with possibly some passive
constraints. The try port is entered just before committing to the rule.
- apply
-
An active constraints commits to a rule with possibly some passive
constraints. The apply port is entered just after committing to the
rule.
Tracing is enabled with the chr_trace/0
predicate and disabled with the chr_notrace/0
predicate.
When enabled the tracer will step through the call
,
exit
, fail
, wake
and apply
ports, accepting debug commands, and simply write out the other ports.
The following debug commans are currently supported:
CHR debug options:
<cr> creep c creep
s skip
g ancestors
n nodebug
b break
a abort
f fail
? help h help
|
Their meaning is:
- creep
-
Step to the next port.
- skip
-
Skip to exit port of this call or wake port.
- ancestors
-
Print list of ancestor call and wake ports.
- nodebug
-
Disable the tracer.
- break
-
Enter a recursive Prolog toplevel. See break/0.
- abort
-
Exit to the toplevel. See abort/0.
- fail
-
Insert failure in execution.
- help
-
Print the above available debug options.
The library(chr)
module
contains several predicates that allow inspecting and printing the
content of the constraint store.
- chr_trace
-
Activate the CHR tracer. By default the CHR tracer is activated and
deactivated automatically by the Prolog predicates trace/0
and
notrace/0.
- chr_notrace
-
De-activate the CHR tracer. By default the CHR tracer is activated and
deactivated automatically by the Prolog predicates trace/0
and
notrace/0.
- chr_leash(+Spec)
-
Define the set of CHR ports on which the CHR tracer asks for user
intervention (i.e. stops). Spec is either a list of ports as
defined in section 7.4.1 or a predefined
`alias'. Defined aliases are:
full
to stop at all ports, none
or off
to never stop, and default
to stop at
the call
,
exit
, fail
, wake
and apply
ports. See also leash/1.
- chr_show_store(+Mod)
-
Prints all suspended constraints of module Mod to the
standard output.