The default visualizers are generic predicates to display FDBG
events (see FDBG Events) in a well readable form. These visualizers
naturally don’t exploit any problem specific information—to have more
“fancy” output, you have to write your own visualizers; see FDBG Writing Visualizers. To use these visualizers, pass them in the
appropriate argument to fdbg_on/1
; see FDBG Options, or
call them directly from user defined visualizers.
fdbg_show(+Constraint, +Actions)
This visualizer produces a trace output of all woken constraints, in which a line showing the constraint is followed by a legend (see FDBG Legend) of all the variables appearing in it, and finally an empty line to separate events from each other. The usual output will look like this:
<fdvar_1>#=0 fdvar_1 = inf..sup -> {0} Constraint exited.
Here, we can see an arithmetical constraint being woken. It narrows ‘fdvar_1’ to a domain consisting of the singleton value 0, and since this is the narrowest domain possible, the constraint doesn’t have anything more to do: it exits.
Note that when you pass fdbg_show
as an option, you should omit
the two arguments, like in:
fdbg_on([…, constraint_hook(fdbg_show), …]).
fdbg_label_show(+Event, +LabelID, +Variable)
This visualizer produces a wallpaper trace output of all labeling
events. It is best used together with fdbg_show/2
. Each
labeling event produces a single line of output, some of them are
followed by an empty line, some others are always followed by another
labeling action and therefore the empty line is omitted. Here is a
sample output of fdbg_label_show/3
:
Labeling [9, <list_1>]: starting in range 0..3. Labeling [9, <list_1>]: step: <list_1> = 0
What we see here is the following:
<list_1>
) identifies the variable
currently being labeled. Note that several identification numbers might
belong to the same variable, depending on the mode of labeling.
step
meaning step
mode labeling
indomain_up
meaning enum
mode labeling or a direct call to indomain/1
indomain_down
meaning enum,down
mode labeling
bisect
meaning bisect
mode labeling
dual
when the domain contains exactly two values and the labeling attempt is nothing more than a selection between them
Note that when you pass fdbg_label_show/3
as an option, you
should omit the three arguments, like in
fdbg_on([…, labeling_hook(fdbg_label_show), …]).