Moved spew/unspew into a new debug module.
This commit is contained in:
@@ -9,6 +9,7 @@ import warnings
|
|||||||
from eventlet.support import greenlets as greenlet
|
from eventlet.support import greenlets as greenlet
|
||||||
from eventlet.hubs import get_hub as get_hub_, get_default_hub as get_default_hub_, use_hub as use_hub_
|
from eventlet.hubs import get_hub as get_hub_, get_default_hub as get_default_hub_, use_hub as use_hub_
|
||||||
from eventlet import greenthread
|
from eventlet import greenthread
|
||||||
|
from eventlet import debug
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'call_after', 'exc_after', 'getcurrent', 'get_default_hub', 'get_hub',
|
'call_after', 'exc_after', 'getcurrent', 'get_default_hub', 'get_hub',
|
||||||
@@ -192,59 +193,8 @@ sleep = greenthread.sleep
|
|||||||
getcurrent = greenlet.getcurrent
|
getcurrent = greenlet.getcurrent
|
||||||
GreenletExit = greenlet.GreenletExit
|
GreenletExit = greenlet.GreenletExit
|
||||||
|
|
||||||
class Spew(object):
|
spew = debug.spew
|
||||||
"""
|
unspew = debug.unspew
|
||||||
"""
|
|
||||||
def __init__(self, trace_names=None, show_values=True):
|
|
||||||
self.trace_names = trace_names
|
|
||||||
self.show_values = show_values
|
|
||||||
|
|
||||||
def __call__(self, frame, event, arg):
|
|
||||||
if event == 'line':
|
|
||||||
lineno = frame.f_lineno
|
|
||||||
if '__file__' in frame.f_globals:
|
|
||||||
filename = frame.f_globals['__file__']
|
|
||||||
if (filename.endswith('.pyc') or
|
|
||||||
filename.endswith('.pyo')):
|
|
||||||
filename = filename[:-1]
|
|
||||||
name = frame.f_globals['__name__']
|
|
||||||
line = linecache.getline(filename, lineno)
|
|
||||||
else:
|
|
||||||
name = '[unknown]'
|
|
||||||
try:
|
|
||||||
src = inspect.getsourcelines(frame)
|
|
||||||
line = src[lineno]
|
|
||||||
except IOError:
|
|
||||||
line = 'Unknown code named [%s]. VM instruction #%d' % (
|
|
||||||
frame.f_code.co_name, frame.f_lasti)
|
|
||||||
if self.trace_names is None or name in self.trace_names:
|
|
||||||
print '%s:%s: %s' % (name, lineno, line.rstrip())
|
|
||||||
if not self.show_values:
|
|
||||||
return self
|
|
||||||
details = '\t'
|
|
||||||
tokens = line.translate(
|
|
||||||
string.maketrans(' ,.()', '\0' * 5)).split('\0')
|
|
||||||
for tok in tokens:
|
|
||||||
if tok in frame.f_globals:
|
|
||||||
details += '%s=%r ' % (tok, frame.f_globals[tok])
|
|
||||||
if tok in frame.f_locals:
|
|
||||||
details += '%s=%r ' % (tok, frame.f_locals[tok])
|
|
||||||
if details.strip():
|
|
||||||
print details
|
|
||||||
return self
|
|
||||||
|
|
||||||
|
|
||||||
def spew(trace_names=None, show_values=False):
|
|
||||||
"""Install a trace hook which writes incredibly detailed logs
|
|
||||||
about what code is being executed to stdout.
|
|
||||||
"""
|
|
||||||
sys.settrace(Spew(trace_names, show_values))
|
|
||||||
|
|
||||||
|
|
||||||
def unspew():
|
|
||||||
"""Remove the trace hook installed by spew.
|
|
||||||
"""
|
|
||||||
sys.settrace(None)
|
|
||||||
|
|
||||||
|
|
||||||
def named(name):
|
def named(name):
|
||||||
|
59
eventlet/debug.py
Normal file
59
eventlet/debug.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
"""The debug module contains utilities and functions for better
|
||||||
|
debugging Eventlet-powered applications."""
|
||||||
|
|
||||||
|
__all__ = ['spew', 'unspew']
|
||||||
|
|
||||||
|
|
||||||
|
class Spew(object):
|
||||||
|
"""
|
||||||
|
"""
|
||||||
|
def __init__(self, trace_names=None, show_values=True):
|
||||||
|
self.trace_names = trace_names
|
||||||
|
self.show_values = show_values
|
||||||
|
|
||||||
|
def __call__(self, frame, event, arg):
|
||||||
|
if event == 'line':
|
||||||
|
lineno = frame.f_lineno
|
||||||
|
if '__file__' in frame.f_globals:
|
||||||
|
filename = frame.f_globals['__file__']
|
||||||
|
if (filename.endswith('.pyc') or
|
||||||
|
filename.endswith('.pyo')):
|
||||||
|
filename = filename[:-1]
|
||||||
|
name = frame.f_globals['__name__']
|
||||||
|
line = linecache.getline(filename, lineno)
|
||||||
|
else:
|
||||||
|
name = '[unknown]'
|
||||||
|
try:
|
||||||
|
src = inspect.getsourcelines(frame)
|
||||||
|
line = src[lineno]
|
||||||
|
except IOError:
|
||||||
|
line = 'Unknown code named [%s]. VM instruction #%d' % (
|
||||||
|
frame.f_code.co_name, frame.f_lasti)
|
||||||
|
if self.trace_names is None or name in self.trace_names:
|
||||||
|
print '%s:%s: %s' % (name, lineno, line.rstrip())
|
||||||
|
if not self.show_values:
|
||||||
|
return self
|
||||||
|
details = '\t'
|
||||||
|
tokens = line.translate(
|
||||||
|
string.maketrans(' ,.()', '\0' * 5)).split('\0')
|
||||||
|
for tok in tokens:
|
||||||
|
if tok in frame.f_globals:
|
||||||
|
details += '%s=%r ' % (tok, frame.f_globals[tok])
|
||||||
|
if tok in frame.f_locals:
|
||||||
|
details += '%s=%r ' % (tok, frame.f_locals[tok])
|
||||||
|
if details.strip():
|
||||||
|
print details
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
|
def spew(trace_names=None, show_values=False):
|
||||||
|
"""Install a trace hook which writes incredibly detailed logs
|
||||||
|
about what code is being executed to stdout.
|
||||||
|
"""
|
||||||
|
sys.settrace(Spew(trace_names, show_values))
|
||||||
|
|
||||||
|
|
||||||
|
def unspew():
|
||||||
|
"""Remove the trace hook installed by spew.
|
||||||
|
"""
|
||||||
|
sys.settrace(None)
|
Reference in New Issue
Block a user