showstack.py
28 lines
| 731 B
| text/x-python
|
PythonLexer
/ contrib / showstack.py
Matt Mackall
|
r26123 | # showstack.py - extension to dump a Python stack trace on signal | ||
# | ||||
# binds to both SIGQUIT (Ctrl-\) and SIGINFO (Ctrl-T on BSDs) | ||||
Boris Feld
|
r35674 | """dump stack trace when receiving SIGQUIT (Ctrl-\) and SIGINFO (Ctrl-T on BSDs) | ||
""" | ||||
Matt Mackall
|
r26123 | |||
Augie Fackler
|
r40072 | from __future__ import absolute_import, print_function | ||
Pulkit Goyal
|
r28522 | import signal | ||
import sys | ||||
import traceback | ||||
Matt Mackall
|
r26123 | |||
def sigshow(*args): | ||||
sys.stderr.write("\n") | ||||
traceback.print_stack(args[1], limit=10, file=sys.stderr) | ||||
sys.stderr.write("----\n") | ||||
Augie Fackler
|
r40072 | def sigexit(*args): | ||
sigshow(*args) | ||||
print('alarm!') | ||||
sys.exit(1) | ||||
Matt Mackall
|
r26123 | def extsetup(ui): | ||
signal.signal(signal.SIGQUIT, sigshow) | ||||
Augie Fackler
|
r40072 | signal.signal(signal.SIGALRM, sigexit) | ||
Matt Mackall
|
r26123 | try: | ||
signal.signal(signal.SIGINFO, sigshow) | ||||
except AttributeError: | ||||
pass | ||||