The primitive trace_port(?Invoc, +Port, +Term) allows the programmer to create user-defined debugger ports, thus enhancing the debugger's basic box model with application-specific checkpoints. Calls to trace_port/3 can be inserted in the code, and when the debugger is on, they will cause execution to stop and enter the debugger, displaying a trace line with the user-defined port and data.
The following example defines two special ports that indicate that values are selected for a boolean variable:
:- pragma(nodebug). bool(B) :- trace_port(Invoc, 'TRY_ZERO', B=0), ( B=0 ; trace_port(Invoc, 'TRY_ONE', B=1), B=1 ). :- untraceable bool/1.In the execution, this will look as follows:
[eclipse 9]: bool(B). (3) 3 TRY_ZERO B = 0 %> creep B = 0 More? (;) (3) 3 TRY_ONE B = 1 %> creep B = 1 yes.Note that both ports share the same invocation number, so the i command can be used to skip from one to the other.