2020-11-01 08:16:19 +01:00
|
|
|
"""
|
|
|
|
Copyright 2013 Eygene A. Ryabinkin
|
|
|
|
Functions to perform stack tracing (for multithreaded programs
|
|
|
|
as well as for single-threaded ones).
|
|
|
|
"""
|
2013-01-28 19:49:29 +01:00
|
|
|
|
|
|
|
import sys
|
|
|
|
import threading
|
|
|
|
import traceback
|
|
|
|
|
|
|
|
|
|
|
|
def dump(out):
|
2020-08-29 20:03:24 +02:00
|
|
|
""" Dumps current stack trace into I/O object 'out' """
|
|
|
|
id2name = {}
|
2020-11-01 08:21:24 +01:00
|
|
|
for th_en in threading.enumerate():
|
|
|
|
id2name[th_en.ident] = th_en.name
|
|
|
|
|
|
|
|
count = 0
|
2020-08-29 20:03:24 +02:00
|
|
|
for i, stack in list(sys._current_frames().items()):
|
2020-11-01 08:21:24 +01:00
|
|
|
out.write("\n# Thread #%d (id=%d), %s\n" % (count, i, id2name[i]))
|
|
|
|
count = count + 1
|
|
|
|
for file, lno, name, line in traceback.extract_stack(stack):
|
|
|
|
out.write('File: "%s", line %d, in %s' % (file, lno, name))
|
2020-08-29 20:03:24 +02:00
|
|
|
if line:
|
|
|
|
out.write(" %s" % (line.strip()))
|
|
|
|
out.write("\n")
|