sapling/contrib/showstack.py
Matt Mackall 6a7c5c9f3d contrib: add showstack extension
This allows getting a Python stack trace at any time on Unix by
hitting Ctrl-\ (or Ctrl-T on BSDs). Useful for debugging mysterious
hangs on the fly. Sample output:

$ hg log -k nosuchmessage
^\
  File "/home/mpm/hg/mercurial/revset.py", line 3089, in _iterfilter
    if cond(x):
  File "/home/mpm/hg/mercurial/util.py", line 415, in f
    cache[arg] = func(arg)
  File "/home/mpm/hg/mercurial/revset.py", line 1215, in matches
    for t in c.files() + [c.user(), c.description()])
  File "/home/mpm/hg/mercurial/context.py", line 525, in files
    return self._changeset[3]
  File "/home/mpm/hg/mercurial/util.py", line 531, in __get__
    result = self.func(obj)
  File "/home/mpm/hg/mercurial/context.py", line 498, in _changeset
    return self._repo.changelog.read(self.rev())
  File "/home/mpm/hg/mercurial/changelog.py", line 338, in read
    text = self.revision(node)
  File "/home/mpm/hg/mercurial/revlog.py", line 1092, in revision
    bins = self._chunks(chain)
  File "/home/mpm/hg/mercurial/revlog.py", line 1013, in _chunks
    ladd(decompress(buffer(data, chunkstart - offset, chunklength)))
  File "/home/mpm/hg/mercurial/revlog.py", line 91, in decompress
    return _decompress(bin)
----
2015-08-28 16:59:31 -05:00

18 lines
460 B
Python

# showstack.py - extension to dump a Python stack trace on signal
#
# binds to both SIGQUIT (Ctrl-\) and SIGINFO (Ctrl-T on BSDs)
import sys, signal, traceback
def sigshow(*args):
sys.stderr.write("\n")
traceback.print_stack(args[1], limit=10, file=sys.stderr)
sys.stderr.write("----\n")
def extsetup(ui):
signal.signal(signal.SIGQUIT, sigshow)
try:
signal.signal(signal.SIGINFO, sigshow)
except AttributeError:
pass