[ Debugging | The ECLiPSe Built-In Predicates | Reference Manual | Alphabetic Index ]

# trace_exit_port

Create an exit-port for the current procedure box.

## Description

This predicate allows to generate a user-defined debugger port, thus enhancing the debugger's basic box model with application- specific checkpoints. In the box model, the execution is viewed as consisting of nested boxes, which are being entered via CALL or REDO ports, and left via EXIT, FAIL or LEAVE ports.

When the debugger is on, this predicate causes the current innermost box to be exited. This should be a box created previously by the trace_call_port/3 builtin, otherwise the debugger's box nesting will get out of sync.

### Modes and Determinism

- trace_exit_port is det

## Examples

        search(Vars) :-
    	trace_call_port(search_enter, _Invoc, search(Vars)),
    	labeling(Vars),
    	trace_exit_port.

    ?- length(L, 3), L :: 1..4, search(L).
      (1) 1 CALL  length(L, 3)   %> zap to port: [~ call] search_enter
      (6) 2 SEARCH_ENTER  search([_501{[... .. ...]}, _514{[...]}, _527{...}])   %> skip
      (6) 2 *EXIT  search([1, 1, 1])   %> skip

## See Also

trace_call_port / 3, trace_point_port / 3, trace_parent_port / 1, spy_term / 2, spy_var / 1, trace / 1