1/* Part of LogicMOO Base Logicmoo Debug Tools 2% =================================================================== 3% File '$FILENAME.pl' 4% Purpose: An Implementation in SWI-Prolog of certain debugging tools 5% Maintainer: Douglas Miles 6% Contact: $Author: dmiles $@users.sourceforge.net ; 7% Version: '$FILENAME.pl' 1.0.0 8% Revision: $Revision: 1.1 $ 9% Revised At: $Date: 2002/07/11 21:57:28 $ 10% Licience: LGPL 11% =================================================================== 12*/ 13:- module(dumpst,[ 14 getPFA/3,getPFA1/3,getPFA2/3,get_m_opt/4,fdmsg/1,fdmsg1/1, 15 neg1_numbervars/3,clauseST/2, 16 dtrace/0,dbreak/0, 17 dtrace/1,dtrace/2, 18 dumptrace/1,dumptrace/2,dumptrace0/1,dumptrace1/1, 19 dumptrace_ret/1, 20 drain_framelist/1, 21 drain_framelist_ele/1, 22 printable_variable_name/2, 23 v_name1/2, 24 v_name2/2, 25 dump_st/0, 26 with_source_module/1, 27 to_wmsg/2, 28 fmsg_rout/1, 29 simplify_goal_printed/2, 30 dumpST/0,dumpST/1,dumpST1/0, 31 dumpST0/0,dumpST0/1,dumpST0/2, 32 dumpST9/0,dumpST9/1,dumpST9/2,dumpST_now/2,printFrame/3,frame_to_fmsg/4 33 34 ]). 35 36:- meta_predicate dumptrace_ret( ), 37 neg1_numbervars( , , ), 38 with_source_module( ), 39 dumptrace_ret( ), 40 dumptrace0( ), 41 dumptrace1( ), 42 dumptrace( ), 43 dtrace( , ). 44 45 46:- use_module(library(logicmoo_util_common)). 47:- use_module(library(ucatch)). 48:- use_module(library(loop_check)). 49:- use_module(library(rtrace)). 50:- use_module(library(must_trace)). 51 52 53:- set_prolog_flag(backtrace_depth, 200). 54:- set_prolog_flag(backtrace_goal_depth, 20). 55:- set_prolog_flag(backtrace_show_lines, true). 56 57:- module_transparent 58 getPFA/3,getPFA1/3,getPFA2/3,get_m_opt/4,fdmsg/1,fdmsg1/1, 59 neg1_numbervars/3,clauseST/2, 60 % dtrace/0, 61 dtrace/1,dtrace/2, 62 dumptrace/1,dumptrace/2, 63 dumptrace_ret/1, 64 dump_st/0, 65 dumpST/0,dumpST/1, 66 dumpST0/0,dumpST0/1,dumpST0/2, 67 dumpST9/0,dumpST9/1,dumpST9/2. 68 69 70:- ensure_loaded(library(debug)). 71:- use_module(library(dmsg)). 72%:- use_module(library(logicmoo_util_strings)). 73 74 75%=
81dump_st:- prolog_current_frame(Frame),dumpST0(Frame,10). 82 83 84%=
90dumpST0:- dbreak, 91 prolog_current_frame(Frame),(tracing->zotrace((CU=dtrace,notrace));CU=true),dumpST0(Frame,800),!,. 92 93%=
99dumpST0(Opts):- once(nb_current('$dump_frame',Frame);prolog_current_frame(Frame)),dumpST0(Frame,Opts). 100 101%=
107:- thread_local(tlbugger:ifHideTrace/0). 108dumpST0(_,_):- tlbugger:ifHideTrace,!. 109dumpST0(Frame,MaxDepth):- ignore(MaxDepth=5000),Term = dumpST(MaxDepth), 110 (var(Frame)->once(nb_current('$dump_frame',Frame);prolog_current_frame(Frame));true), 111 ignore(( get_prolog_backtrace(MaxDepth, Trace,[frame(Frame),goal_depth(13)]), 112 format(user_error, '% dumpST ~p', [Term]), nl(user_error), 113 attach_console,dtrace, 114 dbreak, 115 116 print_prolog_backtrace(user_error, Trace,[subgoal_positions(true)]), nl(user_error), fail)),!. 117 118 119 120% dumpstack_arguments. 121 122%=
128dumpST:- zotrace((prolog_current_frame(Frame),b_setval('$dump_frame',Frame),dumpST1)). 129 130 131:- thread_local(tlbugger:no_slow_io/0). 132:- multifile(tlbugger:no_slow_io/0). 133 134%=
140dumpST1:- current_prolog_flag(dmsg_level,never),!. 141dumpST1:- tlbugger:no_slow_io,!,dumpST0,!. 142dumpST1:- tlbugger:ifHideTrace,!. 143dumpST1:- show_current_source_location,loop_check_early(dumpST9,dumpST0). 144 145%=
151dumpST(Depth):- zotrace((prolog_current_frame(Frame),b_setval('$dump_frame',Frame))), 152 loop_check_early(dumpST9(Depth),dumpST0(Depth)). 153 154 155%=
161get_m_opt(Opts,Max_depth,D100,RetVal):- univ_safe_2(E,[Max_depth,V]),(((member(E,Opts),nonvar(V)))->RetVal=V;RetVal=D100). 162 163 164 165%=
171dumpST9:- zotrace((once(nb_current('$dump_frame',Frame);prolog_current_frame(Frame)), dumpST9(Frame,5000))). 172 173%=
179dumpST9(Depth):- once(nb_current('$dump_frame',Frame);prolog_current_frame(Frame)), dumpST9(Frame,Depth). 180 181 182%=
188dumpST9(_,_):- tlbugger:ifHideTrace,!. 189dumpST9(Frame,MaxDepth):- integer(MaxDepth),!,dumpST_now(Frame,[max_depth(MaxDepth),numbervars(true),show([level,has_alternatives,hidden,context_module,goal,clause])]). 190dumpST9(Frame,From-MaxDepth):- integer(MaxDepth),!,dumpST_now(Frame,[skip_depth(From),max_depth(MaxDepth),numbervars(true),show([level,has_alternatives,hidden,context_module,goal,clause])]). 191dumpST9(Frame,List):- is_list(List),dumpST_now(Frame,[show([level,has_alternatives,hidden,context_module,goal,clause])|List]). 192 193 194 195%=
201drain_framelist(Opts):- repeat, \+ drain_framelist_ele(Opts). 202 203 204%=
210drain_framelist_ele(Opts):- 211 nb_getval('$current_stack_frame_list',[N-Frame|Next]), 212 nb_setval('$current_stack_frame_list',Next),!, 213 printFrame(N,Frame,Opts),!. 214 215 216 217 218%=
224dumpST_now(FrameIn,Opts):-
225 once(number(FrameIn);prolog_current_frame(FrameIn)),
226 nb_setval('$hide_rest_frames',false),
227 b_setval('$current_stack_frame_depth',0),
228 b_setval('$current_stack_frame_list',[]),
229 get_m_opt(Opts,max_depth,100,MD),
230 b_setval('$current_stack_frame_handle',FrameIn),
231 (repeat,
232 nb_getval('$current_stack_frame_depth',N),
233 nb_getval('$current_stack_frame_handle',Frame),
234 ((pushFrame(N,Frame,Opts),MD>N)->
235 ((prolog_frame_attribute(Frame,parent,ParentFrame)->
236 (nb_setval('$current_stack_frame_handle',ParentFrame),
237 NN is N +1,nb_setval('$current_stack_frame_depth',NN),fail); !));
238 (!))),
239 drain_framelist(Opts),!.
247pushFrame(N,Frame,_Opts):- nb_getval('$current_stack_frame_list',Current),nb_setval('$current_stack_frame_list',[N-Frame|Current]). 248 249 250%=
256printFrame(_,_,_):- nb_current('$hide_rest_frames',true),!. 257printFrame(N,Frame,Opts):- 258 ignore(((frame_to_fmsg(N,Frame,Opts,Out)),must(fmsg_rout(Out)))),!. 259 260 261%=
267frame_to_fmsg(N,Frame,Opts,[nf(max_depth,N,Frame,Opts)]):-get_m_opt(Opts,max_depth,100,MD),N>=MD,!,fail. 268% dumpST9(N,Frame,Opts,[nf(max_depth,N,Frame,Opts)]):-get_m_opt(Opts,skip_depth,100,SD),N=<SD,!. 269frame_to_fmsg(_,Frame,Opts,[fr(Goal)]):- get_m_opt(Opts,show,goal,Ctrl),getPFA(Frame,Ctrl,Goal),!. 270frame_to_fmsg(N,Frame,Opts,[nf(no(Ctrl),N,Frame,Opts)]):- get_m_opt(Opts,show,goal,Ctrl),!. 271frame_to_fmsg(N,Frame,Opts,[nf(noFrame(N,Frame,Opts))]). 272 273 274 275 276%=
282fmsg_rout([]):-!. 283fmsg_rout([fr(E)|_]):- member(goal=GG,E),end_dump(GG),!,ignore(fdmsg(fr(E))),!. 284fmsg_rout([fr(E)|_]):- member(goal=GG,E),end_dump(GG),!,ignore(fdmsg(fr(E))),!. 285fmsg_rout([E|RROut]):- ignore(fdmsg(E)),!,fmsg_rout(RROut). 286fmsg_rout(RROut):- show_call(why,forall(member(E,RROut),fdmsg(E))),!. 287 288 289%=
295neg1_numbervars(T,-1,T):-!. 296neg1_numbervars(Out,false,Out):-!. 297neg1_numbervars(Out,true,ROut):-copy_term(Out,ROut),!,snumbervars(ROut,777,_). 298neg1_numbervars(Out,Start,ROut):-copy_term(Out,ROut),integer(Start),!,snumbervars(ROut,Start,_). 299neg1_numbervars(Out,safe,ROut):-copy_term(Out,ROut),safe_numbervars(ROut). 300 301if_defined_mesg_color(G,C):- current_predicate(mesg_color/2),mesg_color(G,C). 302 303%=
309fdmsg1(txt(S)):-'format'(S,[]),!. 310fdmsg1(level=L):-'format'('(~q)',[L]),!. 311fdmsg1(context_module=G):- simplify_m(G,M),!,if_defined_mesg_color(G,Ctrl),ansicall(Ctrl,format('[~w]',[M])),!. 312fdmsg1(has_alternatives=G):- (G==false->true;'format'('<*>',[])),!. 313fdmsg1(hidden=G):- (G==false->true;'format'('$',[G])),!. 314fdmsg1(goal=G):- do_fdmsg1(G). 315fdmsg1(clause=[F,L]):- directory_file_path(_,FF,F),'format'(' % ~w:~w: ',[FF,L]),!. 316fdmsg1(clause=[F,L]):- fresh_line,'format'('% ~w:~w: ',[F,L]),!. 317fdmsg1(clause=[]):-'format'(' /*DYN*/ ',[]),!. 318fdmsg1(G):- if_defined_mesg_color(G,Ctrl),ansicall(Ctrl,format(' ~q ',[G])),!. 319fdmsg1(M):-dmsg(failed_fdmsg1(M)). 320 321do_fdmsg1(G):- 322 simplify_goal_printed(G,GG),!, 323 (GG\==G->write('#');true), 324 term_variables(GG,_Vars), 325 copy_term_nat(GG,GGG), =(GG,GGG), 326 numbervars(GGG,0,_,[attvar(skip)]), 327 if_defined_mesg_color(GGG,Ctrl),ansicall(Ctrl,format(' ~q. ',[GGG])),!. 328 329 330%=
336simplify_m(G,M):-atom(G),sub_atom(G,_,6,0,M),!. 337simplify_m(G,G). 338 339%=
345fdmsg(fr(List)):-is_list(List),!,must((fresh_line,ignore(forall(member(E,List),fdmsg1(E))),nl)). 346fdmsg(M):- logicmoo_util_catch:ddmsg(failed_fdmsg(M)). 347 348:- thread_local(tlbugger:plain_attvars/0). 349 350:-export(simplify_goal_printed/2). 351 352%= 353printable_variable_name(Var, Name) :- nonvar(Name),!,must(printable_variable_name(Var, NameO)),!,Name=NameO. 354printable_variable_name(Var, Name) :- nonvar(Var),Var='$VAR'(_),format(atom(Name),"~w_VAR",Var). 355printable_variable_name(Var, Name) :- nonvar(Var),format(atom(Name),"(_~q_)",Var). 356printable_variable_name(Var,Name):- (get_attr(Var, vn, Name1); 357 get_attr(Var, varnames, Name1)), 358 (var_property(Var,name(Name2))-> 359 (Name1==Name2-> atom_concat(Name1,'_VN',Name) ; Name=(Name1:Name2)); 360 (atom(Name1)->atom_concat('?',Name1,Name); 361 format(atom(Name),"'$VaR'(~q)",Var))),!. 362printable_variable_name(Var,Name):- v_name1(Var,Name),!. 363printable_variable_name(Var,Name):- v_name2(Var,Name),!. % ,atom_concat(Name1,'_TL',Name). 364 365v_name1(Var,Name):- var_property(Var,name(Name)),!. 366v_name1(Var,Name):- get_varname_list(Vs),member(Name=V,Vs),atomic(Name),V==Var,!. 367v_name1(Var,Name):- nb_current('$old_variable_names', Vs),member(Name=V,Vs),atomic(Name),V==Var,!. 368v_name2(Var,Name):- get_varname_list(Vs),format(atom(Name),'~W',[Var, [variable_names(Vs)]]). 369 370 371%attrs_to_list(att(sk,_,ATTRS),[sk|List]):-!,attrs_to_list(ATTRS,List). 372attrs_to_list(att(vn,_,ATTRS),List):-!,attrs_to_list(ATTRS,List). 373attrs_to_list(att(M,V,ATTRS),[M=VV|List]):- locally(tlbugger:plain_attvars,simplify_goal_printed(V,VV)),!,attrs_to_list(ATTRS,List). 374attrs_to_list([],[]). 375attrs_to_list(_ATTRS,[]).
382simplify_var_printed(Var,'$avar'('$VAR'(Name))):- tlbugger:plain_attvars,must(printable_variable_name(Var,Name)),!. 383simplify_var_printed(Var,'$VAR'(Name)):- get_attrs(Var,att(vn, _, [])),printable_variable_name(Var, Name),!. 384simplify_var_printed(Var,'$avar'('$VAR'(Name))):- tlbugger:plain_attvars,must(printable_variable_name(Var,Name)),!. 385simplify_var_printed(Var,'$avar'(Dict)):- get_attrs(Var,ATTRS),must(printable_variable_name(Var,Name)),attrs_to_list(ATTRS,List), 386 dict_create(Dict,'$VAR'(Name),List). 387simplify_var_printed(Var,'$VAR'(Name)):- is_ftVar(Var),!,printable_variable_name(Var, Name). 388 389simplify_goal_printed(Var,Var):-var(Var),!. 390simplify_goal_printed(Var,Name):-cyclic_term(Var),!,Name=Var. 391simplify_goal_printed(Var,Name):-is_ftVar(Var),\+ current_prolog_flag(variable_names_bad,true),simplify_var_printed(Var,Name),!. 392simplify_goal_printed(Var,Var):-var(Var),!. 393simplify_goal_printed(setup_call_catcher_cleanup,scccu). 394simplify_goal_printed(existence_error(X,Y),existence_error(X,Y)):-nl,writeq(existence_error(X,Y)),nl,fail. 395simplify_goal_printed(setup_call_cleanup,sccu). 396simplify_goal_printed(existence_error,'existence_error_XXXXXXXXX__\e[0m\e[1;34m%-6s\e[m\'This is text\e[0mRED__existence_error_existence_error'). 397simplify_goal_printed(each_call_cleanup,eccu). 398simplify_goal_printed(call_cleanup,ccu). 399simplify_goal_printed([Var|_],'$'):-compound(Var),Var = (var_tracker(_) = _ ). 400simplify_goal_printed([Var|_],'$'):-compound(Var),Var = (fbound(_) = _ ). 401simplify_goal_printed(M:I,O):- atom(M),(M==user;M==system),!,simplify_goal_printed(I,O). 402simplify_goal_printed(M:I,O):- atom(M),!,simplify_goal_printed(I,O). 403%simplify_goal_printed(catch(I,V,_),O):- var(V),!,simplify_goal_printed(I,O). 404simplify_goal_printed(always(I),O):- !,simplify_goal_printed(I,O). 405simplify_goal_printed(must_det_lm(M,G),GS):-!,simplify_goal_printed(M:must_det_l(G),GS). 406%simplify_goal_printed('<meta-call>'(G),GS):-!,simplify_goal_printed(G,GS). 407%simplify_goal_printed(call(G),GS):-!,simplify_goal_printed(G,GS). 408simplify_goal_printed(M:G,MS:GS):-atom(M), simplify_m(M,MS),!,simplify_goal_printed(G,GS). 409simplify_goal_printed(dinterp(_,_,I,_),O):- !,simplify_goal_printed(I,O). 410 411 412simplify_goal_printed(P,O):- compound(P),compound_name_arguments(P,F,[I]), 413 atom_contains(F,must),!,simplify_goal_printed(I,O). 414 415simplify_goal_printed(call_term_expansion(_,A,_,B,_),O):- !, simplify_goal_printed(call_term_expansion_5('...',A,'...',B,'...'),O). 416simplify_goal_printed(A,'...'(SA)):- atom(A),atom_concat('/opt/PrologMUD/pack/logicmoo_base/prolog/logicmoo/',SA,A),!. 417simplify_goal_printed(A,'...'(SA)):- atom(A),atom_concat('/home/dmiles/lib/swipl/pack/logicmoo_base/prolog/logicmoo/',SA,A),!. 418simplify_goal_printed(A,'...'(SA)):- atom(A),atom_concat('/home/dmiles/lib/swipl/pack/logicmoo_base/t/',SA,A),!. 419% simplify_goal_printed(A,'...'(SA)):- atom(A),atom_concat('/',_,A),!,directory_file_path(_,SA,A),!. 420simplify_goal_printed(GOAL=A,AS):- goal==GOAL,!,simplify_goal_printed(A,AS). 421simplify_goal_printed(Var,Var):- \+ compound(Var),!. 422simplify_goal_printed(term_position(_,_,_,_,_),'$..term_position/4..$'). 423%simplify_goal_printed(user:G,GS):-!,simplify_goal_printed(G,GS). 424%simplify_goal_printed(system:G,GS):-!,simplify_goal_printed(G,GS). 425%simplify_goal_printed(catchv(G,_,_),GS):-!,simplify_goal_printed(G,GS). 426%simplify_goal_printed(catch(G,_,_),GS):-!,simplify_goal_printed(G,GS). 427%simplify_goal_printed(skolem(V,N,_F),GS):-!,simplify_goal_printed(skeq(V,N,'..'),GS). 428 429simplify_goal_printed(List,O):- 430 is_list(List),length(List,L),L>3, 431 append([A,B,C],[F|_],List),F \='...'(_), !, 432 simplify_goal_printed([A,B,C,'...'(_)],O). 433 434 435simplify_goal_printed([E|OList],O):- \+ is_list(OList), 436 append(List,Open,OList),var(Open),!, 437 is_list(List),length(List,L),L>3, 438 append([A,B,C],[F|_],[E|List]),F \='...'(_), !, 439 simplify_goal_printed([A,B,C,'...'(_)],O). 440 441 442simplify_goal_printed([F|A],[FS|AS]):- !,simplify_goal_printed(F,FS),simplify_goal_printed(A,AS). 443simplify_goal_printed(G,GS):- univ_safe_2(G,[F|A]),maplist(simplify_goal_printed,[F|A],AA),univ_safe_2(GS,AA). 444 445:- multifile(user:portray/1). 446:- dynamic(user:portray/1). 447:- discontiguous(user:portray/1). 448% user:portray 449 450 451 452 453%=
459getPFA(Frame,[L|List],Goal):- !,findall(R, (member(A,[L|List]),getPFA1(Frame,A,R)) ,Goal). 460getPFA(Frame,Ctrl,Goal):-getPFA1(Frame,Ctrl,Goal). 461 462 463%=
469getPFA1(_Frame,txt(Txt),txt(Txt)):-!. 470getPFA1(Frame,clause,Goal):-getPFA2(Frame,clause,ClRef),clauseST(ClRef,Goal),!. 471getPFA1(Frame,Ctrl,Ctrl=Goal):-getPFA2(Frame,Ctrl,Goal),!. 472getPFA1(_,Ctrl,no(Ctrl)). 473 474 475%=
481getPFA2(Frame,Ctrl,Goal):- catchv((prolog_frame_attribute(Frame,Ctrl,Goal)),E,Goal=[error(Ctrl,E)]),!. 482 483 484%=
490clauseST(ClRef,clause=Goal):- findall(V,(member(Prop,[file(V),line_count(V)]),clause_property(ClRef,Prop)),Goal). 491 492clauseST(ClRef,Goal = HB):- ignore(((clause(Head, Body, ClRef),copy_term(((Head :- Body)),HB)))), 493 snumbervars(HB,0,_), 494 findall(Prop,(member(Prop,[source(_),line_count(_),file(_),fact,erased]),clause_property(ClRef,Prop)),Goal). 495 496 497:- thread_local(tlbugger:ifCanTrace/0). 498 499 500%=
506end_dump(true):-!,fail. 507end_dump(_:GG):-!,end_dump(GG). 508end_dump(GG):-compound(GG),functor(GG,F,_),atom_concat(dump,_,F),nb_setval('$hide_rest_frames',true). 509 510% ===================== 511% dtrace/0/1/2 512% ===================== 513 514%:- redefine_system_predicate(system:dtrace()). 515dtrace:- wdmsg("DUMP_TRACE/0"), (thread_self_main->(dumpST,rtrace);(dumpST(30),abort)). 516%=
:- redefine_system_predicate(system:dbreak())
.
524:- thread_local(t_l:no_dbreak/0). 525dbreak:- wdmsg("DUMP_BREAK/0"),dumpST,wdmsg("DUMP_BREAK/0"), 526 (t_l:no_dbreak -> wdmsg("NO__________________DUMP_BREAK/0") ; 527 (thread_self_main->(dumpST,dtrace(system:break),break);true)). 528 529:- thread_local(tlbugger:has_auto_trace/1). 530:-meta_predicate(dtrace( )). 531 532%=
539dtrace(G):- zotrace((tlbugger:has_auto_trace(C),wdmsg(has_auto_trace(C,G)))),!,call(C,G). 540dtrace(G):- strip_module(G,_,dbreak),\+ thread_self_main,!. 541% dtrace(G):- zotrace((tracing,notrace)),!,wdmsg(tracing_dtrace(G)), 542% scce_orig(notrace,restore_trace((leash(+all),dumptrace_or_cont(G))),trace). 543 544dtrace(G):- zotrace((once(((G=dmsg(GG);G=_:dmsg(GG);G=GG),nonvar(GG))),wdmsg(GG)))->true; 545 catch(dumptrace1(G),E, handle_dumptrace_signal(G,E)),fail. %always fails 546%dtrace(G):- \+ tlbugger:ifCanTrace,!,quietly((wdmsg((not(tlbugger:ifCanTrace(G)))))),!,badfood(G),!,dumpST. 547%dtrace(G):- \+ tlbugger:ifCanTrace,!,quietly((wdmsg((not(tlbugger:ifCanTrace(G)))))),!,badfood(G),!,dumpST. 548dtrace(G):- 549 catch(dumptrace1(G),E,handle_dumptrace_signal(G,E)). 550 551handle_dumptrace_signal(G,E):-arg(_,v(continue,abort),E),!,wdmsg(continuing(E,G)),notrace,nodebug. 552handle_dumptrace_signal(_,E):-throw(E). 553%:- export(dumptrace_or_cont/1). 554%dumptrace_or_cont(G):- catch(dumptrace(G),E,handle_dumptrace_signal(G,E)). 555 556 557 558% :-meta_predicate(dtrace(+,?)). 559 560%=
566dtrace(MSG,G):-wdmsg(MSG),dtrace(G). 567 568 569%=
575to_wmsg(G,WG):- \+ compound(G),!,WG=G. 576to_wmsg(M:G,M:WG):-atom(M), to_wmsg(G,WG). 577to_wmsg(dmsg(G),WG):-!, to_wmsg(G,WG). 578to_wmsg(wdmsg(G),WG):-!, to_wmsg(G,WG). 579to_wmsg(G,WG):- (G=WG). 580 581 582with_source_module(G):- 583 '$current_source_module'(M), 584 '$current_typein_module'(WM), 585 scce_orig('$set_typein_module'(M),G,'$set_typein_module'(WM)). 586 587 588 589% ===================== 590% dumptrace/1/2 591% ===================== 592% :-meta_predicate(dumptrace(?)). 593 594%=
600dumptrace(G):- non_user_console,!,dumpST_error(non_user_console+dumptrace(G)),abort,fail. 601dumptrace(G):- 602 locally(set_prolog_flag(gui_tracer, false), 603 locally(set_prolog_flag(gui, false), 604 locally(set_prolog_flag(runtime_debug,0), 605 dumptrace0(G)))). 606 607dumptrace0(G):- zotrace((tracing,notrace,wdmsg(tracing_dumptrace(G)))),!, catch(((dumptrace0(G) *-> dtrace ; (dtrace,fail))),_,true). 608dumptrace0(G):-dumptrace1(G). 609dumptrace1(G):- 610 catch(attach_console,_,true), 611 repeat, 612 (tracing -> (!,fail) ; true), 613 to_wmsg(G,WG), 614 fmt(in_dumptrace(G)), 615 wdmsg(WG), 616 (get_single_char(C)->with_all_dmsg(dumptrace(G,C));throw(cant_get_single_char(!))). 617 618:-meta_predicate(dumptrace( , )). 619 620ggtrace:- 621 leash(+all), 622 visible(+all), 623 debug, 624 maybe_leash(+exception). 625 626%=
632dumptrace(_,0'h):- listing(dumptrace/2),!,fail. 633dumptrace(_,0'g):-!,dumpST,!,fail. 634dumptrace(_,0'G):-!,zotrace(dumpST0(500000)),!,fail. 635dumptrace(_,0'D):-!,prolog_stack:backtrace(8000),!,fail. 636dumptrace(_,0'd):-!,prolog_stack:backtrace(800),!,fail. 637 638dumptrace(G,0'l):-!, 639 restore_trace(( zotrace(ggtrace),G)),!,notrace. 640%dumptrace(G,0's):-!,quietly(ggtrace),!,(quietly(G)*->true;true). 641dumptrace(G,0'S):-!, wdmsg(skipping(G)),!. 642dumptrace(_,0'c):-!, throw(continue). 643%dumptrace(G,0'i):-!,quietly(ggtrace),!,ignore(G). 644dumptrace(_,0'b):-!,debug,break,!,fail. 645dumptrace(_,0'a):-!,abort,!,fail. 646% dumptrace(_,0'x):-!,must(lex),!,fail. 647dumptrace(_,0'e):-!,halt(1),!. 648dumptrace(_,0'm):-!,make,fail. 649dumptrace(G,0'L):-!,use_module(library(xlisting)),call(call,xlisting,G),!,fail. 650dumptrace(G,0'l):-!,visible(+all),show_and_do(rtrace(G)). 651% dumptrace(G,0'c):-!, show_and_do((G))*->true;true. 652dumptrace(G,0'r):-!, stop_rtrace,notrace,nortrace,srtrace,(rtrace((trace,G,notrace))),!,fail. 653dumptrace(G,0'f):-!, notrace,(ftrace((G,notrace))),!,fail. 654dumptrace(G,0't):-!,visible(+all),leash(+all),trace,!,. 655dumptrace(G,10):-!,dumptrace_ret(G). 656dumptrace(G,13):-!,dumptrace_ret(G). 657dumptrace(G,Code):- number(Code),char_code(Char,Code),!,dumptrace(G,Char). 658dumptrace(_G,'p'):- in_cmt(if_defined(pp_DB,fail)),!,fail. 659 660 661dumptrace(_,C):-fmt(unused_keypress(C)),!,fail. 662% )))))))))))))) % ' 663 664%=
670dumptrace_ret(G):- zotrace((leash(+all),visible(+all),visible(+unify),trace)),. 671 672:- use_module(library(logicmoo_util_common)). 673 674:- use_module(library(logicmoo_util_startup)). 675:- fixup_exports.