How to trace "system" predicates/hide my predicates from tracing?

In trace mode, it appears as though “system” predicates are not traced:

foo(X) :- atom(X).

?- trace.

[trace]  ?- foo(a).
   Call: (10) foo(a) ? creep
   Exit: (10) foo(a) ? creep

How is this accomplished? Is there a way to turn this off (so I can see the system calls)? And is there conversely a way to hide my own predicates like that?

You can trace through (Prolog) system predicates after

?- set_prolog_flag(access_level, system).

This doesn’t always work nice, especially the graphical debugger sometimes gets into debugging itself and producing something completely not understandable or crashing.

Source file can turn their predicates into black boxes using

:- set_prolog_flag(generate_debug_info, false).

That might only work properly for module files. Not sure.

1 Like