Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/util.py @ 20244:47d0843647d1
util: introduce util.debugstacktrace for showing a stack trace without crashing
This is often very handy when hacking/debugging.
Calling util.debugstacktrace('hey') from a place in hg will give something like:
hey at:
./hg:38 in <module>
/home/user/hgsrc/mercurial/dispatch.py:28 in run
/home/user/hgsrc/mercurial/dispatch.py:65 in dispatch
/home/user/hgsrc/mercurial/dispatch.py:88 in _runcatch
/home/user/hgsrc/mercurial/dispatch.py:740 in _dispatch
/home/user/hgsrc/mercurial/dispatch.py:514 in runcommand
/home/user/hgsrc/mercurial/dispatch.py:830 in _runcommand
/home/user/hgsrc/mercurial/dispatch.py:801 in checkargs
/home/user/hgsrc/mercurial/dispatch.py:737 in <lambda>
/home/user/hgsrc/mercurial/util.py:472 in check
...
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Sun, 12 Jan 2014 23:28:21 +0100 |
parents | a6014018ec28 |
children | 0889585b44f1 |
comparison
equal
deleted
inserted
replaced
20243:cc09cfea3dd4 | 20244:47d0843647d1 |
---|---|
1981 | 1981 |
1982 def __call__(self, *args): | 1982 def __call__(self, *args): |
1983 self._hooks.sort(key=lambda x: x[0]) | 1983 self._hooks.sort(key=lambda x: x[0]) |
1984 for source, hook in self._hooks: | 1984 for source, hook in self._hooks: |
1985 hook(*args) | 1985 hook(*args) |
1986 | |
1987 def debugstacktrace(msg='stacktrace', skip=0, f=sys.stderr): | |
1988 '''Writes a message to f (stderr) with a nicely formatted stacktrace. | |
1989 Skips the 'skip' last entries. | |
1990 It can be used everywhere and do intentionally not require an ui object. | |
1991 Not be used in production code but very convenient while developing. | |
1992 ''' | |
1993 f.write('%s at:\n' % msg) | |
1994 entries = [('%s:%s' % (fn, ln), func) | |
1995 for fn, ln, func, _text in traceback.extract_stack()[:-skip - 1]] | |
1996 if entries: | |
1997 fnmax = max(len(entry[0]) for entry in entries) | |
1998 for fnln, func in entries: | |
1999 f.write(' %-*s in %s\n' % (fnmax, fnln, func)) | |
2000 | |
2001 # convenient shortcut | |
2002 dst = debugstacktrace |