comparison contrib/showstack.py @ 26123:bdac264e5ed4

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) ----
author Matt Mackall <mpm@selenic.com>
date Fri, 28 Aug 2015 16:59:31 -0500
parents
children f2fe7b199bb4
comparison
equal deleted inserted replaced
26118:049005de325e 26123:bdac264e5ed4
1 # showstack.py - extension to dump a Python stack trace on signal
2 #
3 # binds to both SIGQUIT (Ctrl-\) and SIGINFO (Ctrl-T on BSDs)
4
5 import sys, signal, traceback
6
7 def sigshow(*args):
8 sys.stderr.write("\n")
9 traceback.print_stack(args[1], limit=10, file=sys.stderr)
10 sys.stderr.write("----\n")
11
12 def extsetup(ui):
13 signal.signal(signal.SIGQUIT, sigshow)
14 try:
15 signal.signal(signal.SIGINFO, sigshow)
16 except AttributeError:
17 pass