showstack.py
30 lines
| 679 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) | ||||
Gregory Szorc
|
r41689 | r"""dump stack trace when receiving SIGQUIT (Ctrl-\) or SIGINFO (Ctrl-T on BSDs) | ||
Boris Feld
|
r35674 | """ | ||
Matt Mackall
|
r26123 | |||
Pulkit Goyal
|
r28522 | import signal | ||
import sys | ||||
import traceback | ||||
Matt Mackall
|
r26123 | |||
Augie Fackler
|
r43346 | |||
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
|
r43346 | |||
Augie Fackler
|
r40072 | def sigexit(*args): | ||
sigshow(*args) | ||||
print('alarm!') | ||||
sys.exit(1) | ||||
Augie Fackler
|
r43346 | |||
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 | ||||