mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-23 00:01:36 +00:00
debug: On SIGUSR2, we dump tracebacks for all threads to screen
This commit is contained in:
parent
8489c01ac8
commit
7b86560ded
@ -47,7 +47,7 @@ def process_options(parser, options):
|
||||
sys.exit(0)
|
||||
if options.quiet:
|
||||
options.verbose = 0
|
||||
debug.register_info_dumper()
|
||||
debug.register_info_dumpers()
|
||||
return config.process_proxy_options(parser, options)
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -10,5 +10,11 @@ def test_dump_info():
|
||||
assert cs.getvalue()
|
||||
|
||||
|
||||
def test_dump_stacks():
|
||||
cs = StringIO()
|
||||
debug.dump_stacks(None, None, file=cs)
|
||||
assert cs.getvalue()
|
||||
|
||||
|
||||
def test_sysinfo():
|
||||
assert debug.sysinfo()
|
||||
|
Loading…
Reference in New Issue
Block a user