In the case of a deterministic goal, the debugger automatically reduces the number ports to "call" and "exit". This reduces the clutter during manual debugging and helps the Prolog to retain a deterministic execution of deterministic predicates. The "call" port happens when a goal is invoked for the first time, and the "exit" port happens when a goal succeeds:
In case of a non-deterministic goal, the debugger automatically uses the full set of ports from the Byrd Box model. Non-deterministic goals are goals that succeed with leaving at least one choice point. In the case of a non-deterministic goal, the debugger will see to it that it will also provide the ports "redo" and "fail" to the port callback:
It can happen that the choice points of a non-deterministic goal are later removed by a cut or exception in the continuation. The debugger will then abandon the "redo" port and "fail" port. Many Prolog systems provide further ports than only the ports from the Byrd Box model. We do as well and provide further ports to monitor clause unification:
For monitoring clause unification, we only use a half box so there is no monitoring when clause unification starts. The "head" port is called after a clause unification was successfully complet-ed and before the attribute variable unify hooks are called. The "chop" port is called before the clause unification is undone again.