PublicShow sourcetrace.pl --

Allow tracing pengine execution under SWISH.

Source $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 from pengines_io.pl.

Source pre_context(Name, Goal, Var) is semidet[multifile]
Source 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.
Source 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 is pengine://<pengine>/src.
  • breakpoints is a list of lines (integers) where to put break points.
Source prolog_clause:open_source(+File, -Stream) is semidet[multifile]
Open SWISH non-file sources.