When Source Linking Is Not Possible

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 compiled from 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 like this:

                         ===> dynamic_pred(_743) :- ...

At a call port whose source code cannot be shown, the debugger will show ... :- 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).