diff options
| author | Aldo Cortesi <aldo@nullcube.com> | 2016-06-11 23:07:42 +1200 | 
|---|---|---|
| committer | Aldo Cortesi <aldo@nullcube.com> | 2016-06-11 23:07:42 +1200 | 
| commit | 7b86560dedaad88baaab87bd5c1be7719ec1810e (patch) | |
| tree | 224e00917aaee4204e1d827d85c50a4f98a97e55 /netlib | |
| parent | 8489c01ac81479e48c2ff2c3ab308e07e3d2bacd (diff) | |
| download | mitmproxy-7b86560dedaad88baaab87bd5c1be7719ec1810e.tar.gz mitmproxy-7b86560dedaad88baaab87bd5c1be7719ec1810e.tar.bz2 mitmproxy-7b86560dedaad88baaab87bd5c1be7719ec1810e.zip  | |
debug: On SIGUSR2, we dump tracebacks for all threads to screen
Diffstat (limited to 'netlib')
| -rw-r--r-- | netlib/debug.py | 16 | 
1 files changed, 15 insertions, 1 deletions
diff --git a/netlib/debug.py b/netlib/debug.py index 6f6b0460..792ff52e 100644 --- a/netlib/debug.py +++ b/netlib/debug.py @@ -4,6 +4,7 @@ import sys  import threading  import signal  import platform +import traceback  import psutil @@ -76,5 +77,18 @@ def dump_info(sig, frm, file=sys.stdout):  # pragma: no cover      print("****************************************************", file=file) -def register_info_dumper():  # pragma: no cover +def dump_stacks(signal, frame, file=sys.stdout): +    id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) +    code = [] +    for threadId, stack in sys._current_frames().items(): +        code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""), threadId)) +        for filename, lineno, name, line in traceback.extract_stack(stack): +            code.append('File: "%s", line %d, in %s' % (filename, lineno, name)) +            if line: +                code.append("  %s" % (line.strip())) +    print("\n".join(code), file=file) + + +def register_info_dumpers():  # pragma: no cover      signal.signal(signal.SIGUSR1, dump_info) +    signal.signal(signal.SIGUSR2, dump_stacks)  | 
