I am tring to understand how to set the depth for the trace debug facility.
If I have a program as follows
PROGRAM NAME: sga.pl
findterm([H],_,H). findterm([H|T],X,N):-
Y is X + H, test(Y), findterm(T,Y,N).
test(6). test(_).
If I loaded it in to the interpreter with consult I seem to get a depth of debug as follows.
Ciao-Prolog 1.6 #1: Thu Aug 17 10:06:32 BST 2000 ?- consult('sga.pl').
yes ?- debug_module(user). {Modules selected for debugging: [user]} {No module is selected for source debugging}
yes ?- trace. {The debugger will first creep -- showing everything (trace)}
yes {trace} ?- findterm([1,2,3,4,5,6,7,8,9],0,N). 1 1 Call: user:findterm([1,2,3,4,5,6,7,8,9],0,_370) ? 2 2 Call: _570 is 0+1 ? 2 2 Exit: 1 is 0+1 ? 3 2 Call: user:test(1) ? 3 2 Exit: user:test(1) ? 4 2 Call: user:findterm([2,3,4,5,6,7,8,9],1,_370) ? 5 3 Call: _1016 is 1+2 ? 5 3 Exit: 3 is 1+2 ? 6 3 Call: user:test(3) ? 6 3 Exit: user:test(3) ? 7 3 Call: user:findterm([3,4,5,6,7,8,9],3,_370) ? 8 4 Call: _1461 is 3+3 ? 8 4 Exit: 6 is 3+3 ? 9 4 Call: user:test(6) ? 9 4 Exit: user:test(6) ? 10 4 Call: user:findterm([4,5,6,7,8,9],6,_370) ? 11 5 Call: _1905 is 6+4 ? 11 5 Exit: 10 is 6+4 ? 12 5 Call: user:test(10) ? 12 5 Exit: user:test(10) ? 13 5 Call: user:findterm([5,6,7,8,9],10,_370) ? 14 6 Call: _2348 is 10+5 ? 14 6 Exit: 15 is 10+5 ? 15 6 Call: user:test(15) ? 15 6 Exit: user:test(15) ? a { Execution aborted } ?- ^C
If I use ensure_loaded I can only debug as follows: ensure_loaded('sga.pl'). ?- debug_module(user). {Modules selected for debugging: [user]} {No module is selected for source debugging}
yes ?- trace. {The debugger will first creep -- showing everything (trace)}
yes {trace} ?- findterm([1,2,3,4,5,6,7,8,9],0,N). 1 1 Call: user:findterm([1,2,3,4,5,6,7,8,9],0,_370) ? 1 1 Exit: user:findterm([1,2,3,4,5,6,7,8,9],0,9) ?
N = 9 ?
What do I need to do to debug to this level using ensure_loaded as the mechanism for loading the code?
Just use set_debug_mode(File) <before> loading the file (or other file which recursively loads it) -- of course using Ciao inside emacs simplify all this.
clip(20:55:04):/home/bardo/tmp
ciaosh
{Including /home/bardo/.ciaorc } Ciao-Prolog 1.7 #21: Tue Sep 26 14:25:48 CEST 2000 ?- set_debug_mode(sga).
yes ?- ensure_loaded(sga).
yes ?- debug_module(user). {Modules selected for debugging: [user]} {No module is selected for source debugging}
yes ?- trace. {The debugger will first creep -- showing everything (trace)}
yes {trace} ?- findterm([1,2,3,4,5,6,7,8,9],0,N). 1 1 Call: user:findterm([1,2,3,4,5,6,7,8,9],0,_340) ? 2 2 Call: _540 is 0+1 ? 2 2 Exit: 1 is 0+1 ? 3 2 Call: user:test(1) ? 3 2 Exit: user:test(1) ? 4 2 Call: user:findterm([2,3,4,5,6,7,8,9],1,_340) ? 5 3 Call: _986 is 1+2 ? 5 3 Exit: 3 is 1+2 ? 6 3 Call: user:test(3) ? 6 3 Exit: user:test(3) ? 7 3 Call: user:findterm([3,4,5,6,7,8,9],3,_340) ? 8 4 Call: _1431 is 3+3 ? 8 4 Exit: 6 is 3+3 ? 9 4 Call: user:test(6) ? 9 4 Exit: user:test(6) ? 10 4 Call: user:findterm([4,5,6,7,8,9],6,_340) ? 11 5 Call: _1875 is 6+4 ? 11 5 Exit: 10 is 6+4 ? 12 5 Call: user:test(10) ? n
N = 9 ?
yes {trace} ?-