debuggecode
This commit is contained in:
44
pl/debug.yap
44
pl/debug.yap
@@ -310,7 +310,7 @@ be lost.
|
||||
'$trace_query'(G, Mod, CP, G, EG),
|
||||
gated_call(
|
||||
'$debugger_io',
|
||||
EG,
|
||||
( '$enter_debugging'(G,Mod), EG ),
|
||||
E,
|
||||
'$continue_debugging'(E)
|
||||
).
|
||||
@@ -456,6 +456,26 @@ be lost.
|
||||
%%
|
||||
%% Actually debugs a
|
||||
%% goal!
|
||||
'$trace_goal'(G,M, GoalNumber, H) :-
|
||||
'$is_source'(G,M),
|
||||
'$current_choice_point'(CP),
|
||||
!,
|
||||
'$enter_trace'(GoalNumber, G, M, H),
|
||||
gated_call(
|
||||
true,
|
||||
( '$enter_debugging'(G,M,GoalNumber)
|
||||
->
|
||||
% source mode
|
||||
clause(M:G, B), '$trace_query'(B,M,CP,B,H)
|
||||
;
|
||||
'$execute_nonstop'(G,M)
|
||||
),
|
||||
Port,
|
||||
(
|
||||
'$reenter_debugging'(Port,G,M,GoalNumber),
|
||||
'$trace_port'(Port, GoalNumber, G, M, true, H)
|
||||
)
|
||||
).
|
||||
'$trace_goal'(G, M, GoalNumber, H) :-
|
||||
'$is_metapredicate'(G, prolog),
|
||||
!,
|
||||
@@ -469,28 +489,16 @@ be lost.
|
||||
'$undefined'(G,M),
|
||||
!,
|
||||
'$undefp'([M|G], _).
|
||||
'$trace_goal__'(G,M, GoalNumber, H) :-
|
||||
'$is_source'(G,M),
|
||||
'$current_choice_point'(CP),
|
||||
!,
|
||||
'$enter_trace'(GoalNumber, G, M, H),
|
||||
gated_call(
|
||||
true,
|
||||
( '$creep_is_on_at_entry'(G,M)
|
||||
->
|
||||
clause(M:G, B), '$trace_query'(B,M,CP,B,H)
|
||||
;
|
||||
'$execute_nonstop'(G,M)
|
||||
),
|
||||
Port,
|
||||
'$trace_port'(Port, GoalNumber, G, M, true, H)
|
||||
).
|
||||
% system_
|
||||
'$trace_goal__'(G,M, GoalNumber, H) :-
|
||||
'$enter_trace'(GoalNumber, G, M, H),
|
||||
gated_call(
|
||||
true,
|
||||
'$execute_nonstop'(G,M),
|
||||
(
|
||||
% try creeping
|
||||
( '$enter_debugging'(G,M,GoalNumber) -> '$creep' ; true ),
|
||||
'$execute_nonstop'(G,M)
|
||||
),
|
||||
Port,
|
||||
'$trace_port'(Port, GoalNumber, G, M, true, H)
|
||||
).
|
||||
|
||||
22
pl/spy.yap
22
pl/spy.yap
@@ -415,6 +415,20 @@ notrace(G) :-
|
||||
'$trace_query'(G,Mod,CP,G0,NG).
|
||||
'$enter_debugging'(G,_Mod,_CP,_G0,G).
|
||||
|
||||
'$enter_debugging'(G,Mod,GN) :-
|
||||
çurrent_prolog_flag( debug, Deb ),
|
||||
'__NB_set_value__'( debug, Deb ),
|
||||
( Deb = false
|
||||
->
|
||||
true
|
||||
;
|
||||
'$creep_is_on_at_entry'(G,Mod,GN)
|
||||
->
|
||||
'$creep'
|
||||
;
|
||||
true
|
||||
).
|
||||
|
||||
%% we're coming back from external code to a debugger call.
|
||||
%%
|
||||
'$reenter_debugger'(retry) :-
|
||||
@@ -444,13 +458,10 @@ notrace(G) :-
|
||||
%% enable creeping on the next goal.
|
||||
%%
|
||||
'$re_enter_creep_mode' :-
|
||||
'__NB_getval__'(debug, true, fail),
|
||||
!,
|
||||
'$creep'.
|
||||
'$re_enter_creep_mode'.
|
||||
|
||||
'$creep_is_off'(_,_) :-
|
||||
'__NB_getval__'(debug, false, fail), !.
|
||||
'$creep_is_off'(Module:G, GN0) :-
|
||||
'__NB_getval__'('$debug_status',state(zip, GN, Spy,_), fail),
|
||||
(
|
||||
@@ -469,12 +480,10 @@ notrace(G) :-
|
||||
%%
|
||||
%
|
||||
'$creep_is_on' :-
|
||||
'__NB_getval__'(debug, true, fail),
|
||||
'__NB_getval__'('$debug_status',state(Step, _GN, _Spy,_), fail),
|
||||
Step \= zip.
|
||||
|
||||
'$creep_is_on_at_entry'(G,M) :-
|
||||
'__NB_getval__'(debug, true, fail),
|
||||
'$creep_is_on_at_entry'(G,M,GoalNo) :-
|
||||
\+ '$system_predicate'(G,M),
|
||||
'__NB_getval__'('$debug_status',state(Step, _GN, Spy,_), fail),
|
||||
(
|
||||
@@ -492,7 +501,6 @@ notrace(G) :-
|
||||
|
||||
'$trace_off' :-
|
||||
'__NB_getval__'('$debug_status', state(_Creep, GN, Spy, Trace),fail),
|
||||
'__NB_setval__'(debug,false),
|
||||
nb_setval('$debug_status', state(zip, GN, Spy,Trace)).
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user