contrib/showstack.py
author Matt Harbison <matt_harbison@yahoo.com>
Sun, 14 Jul 2019 01:31:42 -0400
changeset 42601 862f6bddacce
parent 41562 6dae1f31c6c9
child 43076 2372284d9457
permissions -rw-r--r--
automation: correct the path separator in LIBPATH on Windows I haven't tried building the x86 installer, but happened to notice this when working on the thg installer. Experimenting in PowerShell seems to show that LIBPATH was expanded at the end, but with ':' between, it effectively corrupted `${root}\WinSDK\Lib` and the first path in LIBPATH. Differential Revision: https://phab.mercurial-scm.org/D6642
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26123
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     1
# showstack.py - extension to dump a Python stack trace on signal
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     2
#
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     3
# binds to both SIGQUIT (Ctrl-\) and SIGINFO (Ctrl-T on BSDs)
41562
6dae1f31c6c9 showstack: use raw docstring
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40037
diff changeset
     4
r"""dump stack trace when receiving SIGQUIT (Ctrl-\) or SIGINFO (Ctrl-T on BSDs)
35656
c9eb92fb87b7 showstack: add an extension docstring
Boris Feld <boris.feld@octobus.net>
parents: 28522
diff changeset
     5
"""
26123
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     6
40037
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
     7
from __future__ import absolute_import, print_function
28522
f2fe7b199bb4 showstack: use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26123
diff changeset
     8
import signal
f2fe7b199bb4 showstack: use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26123
diff changeset
     9
import sys
f2fe7b199bb4 showstack: use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 26123
diff changeset
    10
import traceback
26123
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    11
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    12
def sigshow(*args):
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    13
    sys.stderr.write("\n")
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    14
    traceback.print_stack(args[1], limit=10, file=sys.stderr)
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    15
    sys.stderr.write("----\n")
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    16
40037
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
    17
def sigexit(*args):
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
    18
    sigshow(*args)
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
    19
    print('alarm!')
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
    20
    sys.exit(1)
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
    21
26123
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    22
def extsetup(ui):
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    23
    signal.signal(signal.SIGQUIT, sigshow)
40037
acf5dbe39478 showstack: also handle SIGALRM
Augie Fackler <augie@google.com>
parents: 35656
diff changeset
    24
    signal.signal(signal.SIGALRM, sigexit)
26123
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    25
    try:
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    26
        signal.signal(signal.SIGINFO, sigshow)
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    27
    except AttributeError:
bdac264e5ed4 contrib: add showstack extension
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    28
        pass