:-(debug(_A,_B,_C),,(=(_B,{clause;fail;goal}),,(!,,(=(_C,{true;false}),,(!,,(;(,(is_function(_A),,(!,,(=(_D,->),,(=(_E,function),=(_F,rewrite_func))))),;(,(is_predicate(_A),,(!,,(=(_D,:-),,(=(_E,predicate),=(_F,rewrite_pred))))),,(write_err("Debug: ",_A," is not a predicate or a function"),,(nl,fail)))),,(dynamic(_A),,(;(,(get_old_clauses(_A,_G),!),,(read_and_retract(_A,_G,_D),assert(old_clauses(_A,_G,_D,_E)))),;(,(:==(_G,[]),,(!,,(write_err("*** No clauses for '",_A,"'"),nl_err))),,(write("Added debugging code to ",_E," '",_A,"': level=",_B,", verbose=",_C,", clauses=",length(_G)),,(nl,,(=(_F,@(_G,_A,_B,_C)),_F)))))))))))).
:-(get_old_clauses(_A,_B),,(clause(:-(old_clauses(_A,_B,_C,_D),succeed)),,(!,,(write("Debug: restored original clauses for ",_D," '",_A,"'"),,(nl,read_and_retract(_A,@,_C)))))).