Sometimes the debugger cannot find the source code for a predicate.
This will happen when there is no source code, or when the
correspondence between the compiled code and source code cannot be
determined. For example, a dynamic predicate does not necessarily
have source code, and so the debugger currently cannot show source.
Similarly, a meta-call (executing a term with
call/1) does not
have any source code. The debugger also often cannot find the source
code of clauses produced by
term_expansion/2. Predicates that are
user do not have source either!
When source linking is not possible, the debugger will show as much of
the clause as it knows in place of the source file, with the appropriate
arrows. At a head port, it will show the goal being called, followed by
:- ... indicating that this goal will be matched with the head
of a clause. For the head of a predicate
descendent/2, it might look
===> dynamic_pred(_743) :- ...
At a call port whose source code cannot be shown, the debugger will
... :- followed by the goal, indicating that this goal is
in some unknown clause. The arrow will be as appropriate for that
port. The call port for a call to
descendant/2 might look like this:
... :- ---> descendant(peter, _749).