cython
1###############################################
2#
3# Odds and ends for debugging
4#
5###############################################
6
7def print_call_chain(*args):
8import sys
9print(" ".join(map(str, args)))
10f = sys._getframe(1)
11while f:
12name = f.f_code.co_name
13s = f.f_locals.get('self', None)
14if s:
15c = getattr(s, "__class__", None)
16if c:
17name = "%s.%s" % (c.__name__, name)
18print("Called from: %s %s" % (name, f.f_lineno))
19f = f.f_back
20print("-" * 70)
21