Skip to content

Instantly share code, notes, and snippets.

@MOOOWOOO
Created April 19, 2016 16:46
Show Gist options
  • Select an option

  • Save MOOOWOOO/e6146c4adf871593af9f8ac0ae19be0f to your computer and use it in GitHub Desktop.

Select an option

Save MOOOWOOO/e6146c4adf871593af9f8ac0ae19be0f to your computer and use it in GitHub Desktop.
程序跟踪装饰器,用于程序运行的时候打印出每一步的运行顺序和调用逻辑
import sys,os,linecache
def trace(f):
def globaltrace(frame, why, arg):
if why == "call":
return localtrace
return None
def localtrace(frame, why, arg):
if why == "line":
# record the file name and line number of every trace
filename = frame.f_code.co_filename
lineno = frame.f_lineno
bname = os.path.basename(filename)
print "{}({}): {}".format( bname, lineno, linecache.getline(filename, lineno).strip('\r\n')),
return localtrace
def _f(*args, **kwds):
sys.settrace(globaltrace)
result = f(*args, **kwds) sys.settrace(None)
return result
return _f
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment