- 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
noneif 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 term
context(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 clause
stack_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:
- 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.
- Boolean that indicates whether the library tries to find
line numbers for the calls. Default is
- stack_guard(+Reason) is semidet[multifile, library(prolog_stack)]
- Dynamic multifile predicate. It is called with
'C'or the predicate indicator of the guard, the predicate calling catch/3. The exception must be of compatible with the shape
error(Formal, context(Stack, Msg)). The default is to catch
none, uncaught exceptions.
'C'implies that the callback from C will handle the exception.