
trace.pl --
Allow tracing pengine execution under SWISH.
$swish wrapper(:Goal, ?ContextVars)
- Wrap a SWISH goal in '$swish wrapper'. This has two advantages:
we can detect that the tracer is operating on a SWISH goal by
inspecting the stack and we can save/restore the debug state to
deal with debugging next solutions.
ContextVars is a list of variables that have a reserved name. The hooks pre_context/3 and post_context/3 can be used to give these variables a value extracted from the environment. This allows passing more information than just the query answers.
The binding
_residuals = '$residuals'(Residuals)
is added to the residual goals by pengines:event_to_json/4 frompengines_io.pl
. - pre_context(Name, Goal, Var) is semidet[multifile]
post_context(Name, Goal, Var) is semidet[multifile]
- Multifile hooks to extract additional information from the Pengine, either just before Goal is started or after an answer was produced. Extracting the information is triggered by introducing a variable with a reserved name.
pengines:prepare_goal(+GoalIn, -GoalOut, +Options) is semidet[multifile]
- Handle the
breakpoints(List)
option to set breakpoints prior to execution of the query. If breakpoints are present and enabled, the goal is executed in debug mode. List is a list, holding a dict for each source that has breakpoints. The dict contains these keys:file
is the source file. For the current Pengine source this ispengine://<pengine>/src
.breakpoints
is a list of lines (integers) where to put break points.
prolog_clause:open_source(+File, -Stream) is semidet[multifile]
- Open SWISH non-file sources.