debuggecode

This commit is contained in:
Vitor Santos Costa
2019-05-11 11:24:15 +01:00
parent 4d395761a4
commit 46b9b46bca
5 changed files with 127 additions and 38 deletions

View File

@@ -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)
).

View File

@@ -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)).
/*