Tue, 04 Oct 2005:
This is some code I re-did for lawgon, while on IRC. This one dates to the time I was trying to get BitTorrent to tunnel over HTTP and ran into trouble figuring out which function is called by what. This is not as good as the original version - but this is quite good if you want to debug python without putting too many print statements :)
import sys def tracer (frame, event, arg): if event == "call": print "%s() --> from %s:%d" % (frame.f_code.co_name, frame.f_back.f_code.co_filename, frame.f_back.f_lineno) def fact(i): if(i == 1): return 1 return fact(i-1) * i sys.settrace(tracer) def main(): print fact(9)
This is by no means original code and shouldn't be misunderstood to be my invention. If you want, you could try playing around with frame.f_globals["__file__"] or __module__. I think you could even hack in linecache to build a debugger of sorts. Python rocks !!
--* If you see this blog rockin', don't come a knockin'