def print_trace_table(request): def temp(): exec(request["code"]) tracker = Tracker(**request["parameters"]) targets = request["variables"] def tracer(frame, event, arg=None): code = frame.f_code line_no = frame.f_lineno #tracker.onchange("_line_number", line_no) for v in targets: if len(tracker.values.get(v, {}).keys()) > 0: if tracker.values[v][max( tracker.values[v].keys())] == frame.f_locals.get(v): continue if v in frame.f_locals.keys(): tracker.onchange(v, frame.f_locals.get(v)) return tracer sys.settrace(tracer) temp() sys.settrace(None) print(tracker.displayTraceTable())
from tracker import Tracker, VarContainer tracker = Tracker(compact=True) t = VarContainer(tracker.onchange) # begin problem def TotalOut(a, b): t.a, t.b = a, b # must use variables in the varContainer t.c = t.a + t.b while t.a < t.c: t.a = t.a + 1 t.b = t.b - t.a return t.b TotalOut(3, 4) # end problem print(tracker.displayTraceTable())