1 # Print tracebacks, with a dump of local variables.
2 # Also an interactive stack trace browser.
3 # Note -- this module is obsolete -- use pdb.pm() instead.
11 def br(): browser(sys
.last_traceback
)
13 def tb(): printtb(sys
.last_traceback
)
31 line
= raw_input('TB: ')
32 except KeyboardInterrupt:
33 print '\n[Interrupted]'
38 cmd
= string
.strip(line
)
45 if ptr
-1 >= 0: ptr
= ptr
-1
46 else: print 'Bottom of stack.'
48 if ptr
+1 < len(tblist
): ptr
= ptr
+1
49 else: print 'Top of stack.'
51 printsymbols(tb
.tb_frame
.f_locals
)
52 elif cmd
== 'globals':
53 printsymbols(tb
.tb_frame
.f_globals
)
54 elif cmd
in ('?', 'help'):
60 filename
= tb
.tb_frame
.f_code
.co_filename
63 first
= max(1, last
-10)
64 for i
in range(first
, last
+1):
65 if i
== lineno
: prefix
= '***' + string
.rjust(`i`
, 4) + ':'
66 else: prefix
= string
.rjust(`i`
, 7) + ':'
67 line
= linecache
.getline(filename
, i
)
68 if line
[-1:] == '\n': line
= line
[:-1]
71 def browserexec(tb
, cmd
):
72 locals = tb
.tb_frame
.f_locals
73 globals = tb
.tb_frame
.f_globals
75 exec cmd
+'\n' in globals, locals
77 print '*** Exception:',
78 if type(sys
.exc_type
) == type(''):
81 print sys
.exc_type
.__name
__,
82 if sys
.exc_value
<> None:
83 print ':', sys
.exc_value
,
85 print 'Type help to get help.'
89 print ' This is the traceback browser. Commands are:'
90 print ' up : move one level up in the call stack'
91 print ' down : move one level down in the call stack'
92 print ' locals : print all local variables at this level'
93 print ' globals : print all global variables at this level'
94 print ' list : list source code around the failure'
95 print ' help : print help (what you are reading now)'
96 print ' quit : back to command interpreter'
97 print ' Typing any other 1-line statement will execute it'
98 print ' using the current level\'s symbol tables'
108 if tb
.tb_frame
.f_locals
is not tb
.tb_frame
.f_globals
:
109 printsymbols(tb
.tb_frame
.f_locals
)
111 def printtbheader(tb
):
112 filename
= tb
.tb_frame
.f_code
.co_filename
113 lineno
= tb
.tb_lineno
114 info
= '"' + filename
+ '"(' + `lineno`
+ ')'
115 line
= linecache
.getline(filename
, lineno
)
117 info
= info
+ ': ' + string
.strip(line
)
124 print ' ' + string
.ljust(name
, 12) + ':',
125 printobject(d
[name
], 4)
128 def printobject(v
, maxlevel
):
131 elif type(v
) in (type(0), type(0.0)):
133 elif type(v
) == type(''):
135 print `v
[:17] + '...'`
,
138 elif type(v
) == type(()):
140 printlist(v
, maxlevel
)
142 elif type(v
) == type([]):
144 printlist(v
, maxlevel
)
146 elif type(v
) == type({}):
148 printdict(v
, maxlevel
)
153 def printlist(v
, maxlevel
):
159 for i
in range(min(6, n
)):
160 printobject(v
[i
], maxlevel
-1)
161 if i
+1 < n
: print ',',
162 if n
> 6: print '...',
164 def printdict(v
, maxlevel
):
172 for i
in range(min(6, n
)):
175 printobject(v
[key
], maxlevel
-1)
176 if i
+1 < n
: print ',',
177 if n
> 6: print '...',