Lonnie Princehouse wrote: > I don't know of a way to get the current global trace function. This > could certainly cause trouble if you're trying to be compatible with > other packages that want to use their own trace functions (like psyco, > or debuggers). Does anyone know how to get the global trace? > > On the other hand, the local trace function is in the f_trace attribute > of a frame.
Oh, I overlooked this. Then the solution becomes simple: sys._getframe().f_trace Test: >>> an = Analyzer() >>> sys.settrace(an.trace_returns) >>> sys._getframe().f_trace <bound method Analyzer.trace_returns of <__main__.Analyzer instance at 0x010015D0>> > It looks like global trace functions only get the "call" event, and are > expected to return a local trace function that will receive "line" and > "return" events, so you will need a global trace in order to set local > traces (setting myframe.f_trace explicitly doesn't seem to do it). I think that Your trace_returns function is actually a global trace that returns itself and does not handle the 'call' event. If You look at the code in the debug-module bdb.py the 'call' event gets handled by the local trace function dispactch_call(): def trace_dispatch(self, frame, event, arg): if self.quitting: return # None if event == 'line': return self.dispatch_line(frame) if event == 'call': return self.dispatch_call(frame, arg) if event == 'return': return self.dispatch_return(frame, arg) if event == 'exception': return self.dispatch_exception(frame, arg) print 'bdb.Bdb.dispatch: unknown debugging event:', `event` return self.trace_dispatch Ciao, Kay -- http://mail.python.org/mailman/listinfo/python-list