Show More
@@ -2841,9 +2841,9 b' class hooks(object):' | |||||
2841 | results.append(hook(*args)) |
|
2841 | results.append(hook(*args)) | |
2842 | return results |
|
2842 | return results | |
2843 |
|
2843 | |||
2844 | def getstackframes(skip=0, line=' %-*s in %s\n', fileline='%s:%s'): |
|
2844 | def getstackframes(skip=0, line=' %-*s in %s\n', fileline='%s:%s', depth=0): | |
2845 | '''Yields lines for a nicely formatted stacktrace. |
|
2845 | '''Yields lines for a nicely formatted stacktrace. | |
2846 | Skips the 'skip' last entries. |
|
2846 | Skips the 'skip' last entries, then return the last 'depth' entries. | |
2847 | Each file+linenumber is formatted according to fileline. |
|
2847 | Each file+linenumber is formatted according to fileline. | |
2848 | Each line is formatted according to line. |
|
2848 | Each line is formatted according to line. | |
2849 | If line is None, it yields: |
|
2849 | If line is None, it yields: | |
@@ -2854,7 +2854,8 b" def getstackframes(skip=0, line=' %-*s i" | |||||
2854 | Not be used in production code but very convenient while developing. |
|
2854 | Not be used in production code but very convenient while developing. | |
2855 | ''' |
|
2855 | ''' | |
2856 | entries = [(fileline % (fn, ln), func) |
|
2856 | entries = [(fileline % (fn, ln), func) | |
2857 |
for fn, ln, func, _text in traceback.extract_stack()[:-skip - 1] |
|
2857 | for fn, ln, func, _text in traceback.extract_stack()[:-skip - 1] | |
|
2858 | ][-depth:] | |||
2858 | if entries: |
|
2859 | if entries: | |
2859 | fnmax = max(len(entry[0]) for entry in entries) |
|
2860 | fnmax = max(len(entry[0]) for entry in entries) | |
2860 | for fnln, func in entries: |
|
2861 | for fnln, func in entries: | |
@@ -2863,16 +2864,18 b" def getstackframes(skip=0, line=' %-*s i" | |||||
2863 | else: |
|
2864 | else: | |
2864 | yield line % (fnmax, fnln, func) |
|
2865 | yield line % (fnmax, fnln, func) | |
2865 |
|
2866 | |||
2866 |
def debugstacktrace(msg='stacktrace', skip=0, |
|
2867 | def debugstacktrace(msg='stacktrace', skip=0, | |
|
2868 | f=stderr, otherf=stdout, depth=0): | |||
2867 | '''Writes a message to f (stderr) with a nicely formatted stacktrace. |
|
2869 | '''Writes a message to f (stderr) with a nicely formatted stacktrace. | |
2868 | Skips the 'skip' last entries. By default it will flush stdout first. |
|
2870 | Skips the 'skip' entries closest to the call, then show 'depth' entries. | |
|
2871 | By default it will flush stdout first. | |||
2869 | It can be used everywhere and intentionally does not require an ui object. |
|
2872 | It can be used everywhere and intentionally does not require an ui object. | |
2870 | Not be used in production code but very convenient while developing. |
|
2873 | Not be used in production code but very convenient while developing. | |
2871 | ''' |
|
2874 | ''' | |
2872 | if otherf: |
|
2875 | if otherf: | |
2873 | otherf.flush() |
|
2876 | otherf.flush() | |
2874 | f.write('%s at:\n' % msg.rstrip()) |
|
2877 | f.write('%s at:\n' % msg.rstrip()) | |
2875 | for line in getstackframes(skip + 1): |
|
2878 | for line in getstackframes(skip + 1, depth=depth): | |
2876 | f.write(line) |
|
2879 | f.write(line) | |
2877 | f.flush() |
|
2880 | f.flush() | |
2878 |
|
2881 |
@@ -122,7 +122,7 b' Test internal debugstacktrace command' | |||||
122 | > dst('hello from g\\n', skip=1) |
|
122 | > dst('hello from g\\n', skip=1) | |
123 | > h() |
|
123 | > h() | |
124 | > def h(): |
|
124 | > def h(): | |
125 | > dst('hi ...\\nfrom h hidden in g', 1) |
|
125 | > dst('hi ...\\nfrom h hidden in g', 1, depth=2) | |
126 | > f() |
|
126 | > f() | |
127 | > EOF |
|
127 | > EOF | |
128 | $ python debugstacktrace.py |
|
128 | $ python debugstacktrace.py | |
@@ -134,6 +134,5 b' Test internal debugstacktrace command' | |||||
134 | debugstacktrace.py:4 in f |
|
134 | debugstacktrace.py:4 in f | |
135 | hi ... |
|
135 | hi ... | |
136 | from h hidden in g at: |
|
136 | from h hidden in g at: | |
137 |
debugstacktrace.py: |
|
137 | debugstacktrace.py:4 in f | |
138 |
debugstacktrace.py: |
|
138 | debugstacktrace.py:7 in g | |
139 | debugstacktrace.py:7 in g |
|
General Comments 0
You need to be logged in to leave comments.
Login now