Skip to content

Instantly share code, notes, and snippets.

@maliubiao
Last active December 25, 2015 03:48
Show Gist options
  • Save maliubiao/6911901 to your computer and use it in GitHub Desktop.
Save maliubiao/6911901 to your computer and use it in GitHub Desktop.
stacktrace.py , usage: import trace, trace.starttrace("logfile") your cdoe to trace, trace.stoptrace()
import sys
import os
from cStringIO import StringIO
from traceback import extract_stack
"""
stack sample:
default_headers /usr/lib/python2.7/site-packages/requests/utils.py 452
__init__ /usr/lib/python2.7/site-packages/requests/sessions.py 176
request /usr/lib/python2.7/site-packages/requests/api.py 43
get /usr/lib/python2.7/site-packages/requests/api.py 55
<module> test-trace.py 5
default_user_agent /usr/lib/python2.7/site-packages/requests/utils.py 421
default_headers /usr/lib/python2.7/site-packages/requests/utils.py 454
__init__ /usr/lib/python2.7/site-packages/requests/sessions.py 176
request /usr/lib/python2.7/site-packages/requests/api.py 43
get /usr/lib/python2.7/site-packages/requests/api.py 55
<module> test-trace.py 5
python_implementation /usr/lib64/python2.7/platform.py 1447
default_user_agent /usr/lib/python2.7/site-packages/requests/utils.py 423
default_headers /usr/lib/python2.7/site-packages/requests/utils.py 454
__init__ /usr/lib/python2.7/site-packages/requests/sessions.py 176
request /usr/lib/python2.7/site-packages/requests/api.py 43
get /usr/lib/python2.7/site-packages/requests/api.py 55
<module> test-trace.py 5
"""
datafile = None
memfile = StringIO()
def starttrace(path=None):
global datafile
if path:
datafile = path
else:
datafile = "trace.stacks"
def trace(frame, event, arg):
for sourcefile, line, func, code in reversed(extract_stack()[:-1]):
memfile.write(" ".join((func, sourcefile, str(line), "\n")))
memfile.write("\n")
sys.settrace(trace)
def stoptrace():
sys.settrace(None)
with open(datafile, "w+") as f:
f.write(memfile.getvalue())
memfile.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment