- prolog_stack:stack_guard(+PI) is semidet[multifile, library(prolog_stack)]
- Dynamic multifile hook that is normally not defined. The hook is
called with PI equal to
none
if the exception is not caught and with a fully qualified (e.g., Module:Name/Arity) predicate indicator of the predicate that called catch/3 if the exception is caught.The exception is of the form
error(Formal, ImplDef)
and this hook succeeds, ImplDef is unified to a termcontext(prolog_stack(StackData), Message)
. This context information is used by the message printing system to print a human readable representation of the stack when the exception was raised.For example, using a clause
stack_guard(none)
prints contexts for uncaught exceptions only. Using a clausestack_guard(_)
prints a full stack-trace for any error exception if the exception is given to print_message/2. See also library(http/http_error), which limits printing of exceptions to exceptions in user-code called from the HTTP server library.Details of the exception decoration is controlled by two Prolog flags:
- backtrace_depth
- Integer that controls the maximum number of frames collected. Default is 20. If a guard is specified, callers of the guard are removed from the stack-trace.
- backtrace_show_lines
- Boolean that indicates whether the library tries to find
line numbers for the calls. Default is
true
.
- stack_guard(+Reason) is semidet[multifile, library(prolog_stack)]
- Dynamic multifile predicate. It is called with
none
,'C'
or the predicate indicator of the guard, the predicate calling catch/3. The exception must be of compatible with the shapeerror(Formal, context(Stack, Msg))
. The default is to catchnone
, uncaught exceptions.'C'
implies that the callback from C will handle the exception.