""" Copyright 2013 Eygene A. Ryabinkin Functions to perform stack tracing (for multithreaded programs as well as for single-threaded ones). """ import sys import threading import traceback def dump(out): """ Dumps current stack trace into I/O object 'out' """ id2name = {} for th in threading.enumerate(): id2name[th.ident] = th.name n = 0 for i, stack in list(sys._current_frames().items()): out.write("\n# Thread #%d (id=%d), %s\n" % (n, i, id2name[i])) n = n + 1 for f, lno, name, line in traceback.extract_stack(stack): out.write('File: "%s", line %d, in %s' % (f, lno, name)) if line: out.write(" %s" % (line.strip())) out.write("\n")