| ############################################### | |
| # | |
| # Odds and ends for debugging | |
| # | |
| ############################################### | |
| def print_call_chain(*args): | |
| import sys | |
| print(" ".join(map(str, args))) | |
| f = sys._getframe(1) | |
| while f: | |
| name = f.f_code.co_name | |
| s = f.f_locals.get('self', None) | |
| if s: | |
| c = getattr(s, "__class__", None) | |
| if c: | |
| name = "%s.%s" % (c.__name__, name) | |
| print("Called from: %s %s" % (name, f.f_lineno)) | |
| f = f.f_back | |
| print("-" * 70) |