def __init__(self, callback): self.callback = callback self.btracer = BytecodeTracer() self.top_level_function = None self.sys_modules = None
import dis import inspect import sys from bytecode_tracer import BytecodeTracer from bytecode_tracer import rewrite_function btracer = BytecodeTracer() def trace(frame, event, arg): bytecode_events = list(btracer.trace(frame, event)) if bytecode_events: for ev, rest in bytecode_events: if ev == 'c_call': func, pargs, kargs = rest print "C_CALL", func.__name__, repr(pargs), repr(kargs) elif ev == 'c_return': print "C_RETURN", repr(rest) elif ev == 'print': print "PRINT", repr(rest) elif ev == 'print_to': value, output = rest print "PRINT_TO", repr(value), repr(output) else: if event == 'call': args = inspect.getargvalues(frame) try: args = str(args) except Exception: args = "<unknown>"
def setup(self): self._traces = [] self._ignored_events = ['load_global', 'store_global'] self.btracer = BytecodeTracer()
def setup(self): self._traces = [] self.btracer = BytecodeTracer()