mirror of https://github.com/python/cpython
Added a method "format_stack_entry" to be used by derived classes.
Forget about the temp file.
This commit is contained in:
parent
d7d8cd44c1
commit
fac6da22ff
37
Lib/bdb.py
37
Lib/bdb.py
|
@ -6,7 +6,6 @@
|
|||
# and 'wdb', a window-oriented debugger.
|
||||
# And of course... you can roll your own!
|
||||
|
||||
|
||||
import sys
|
||||
|
||||
BdbQuit = 'bdb.BdbQuit' # Exception to give up completely
|
||||
|
@ -217,12 +216,32 @@ class Bdb: # Basic Debugger
|
|||
t = t.tb_next
|
||||
return stack, i
|
||||
|
||||
#
|
||||
|
||||
def format_stack_entry(self, (frame, lineno)):
|
||||
import codehack, linecache, repr, string
|
||||
filename = frame.f_code.co_filename
|
||||
s = filename + '(' + `lineno` + ')'
|
||||
s = s + codehack.getcodename(frame.f_code)
|
||||
if frame.f_locals.has_key('__args__'):
|
||||
args = frame.f_locals['__args__']
|
||||
if args is not None:
|
||||
s = s + repr.repr(args)
|
||||
if frame.f_locals.has_key('__return__'):
|
||||
rv = frame.f_locals['__return__']
|
||||
s = s + '->'
|
||||
s = s + repr.repr(rv)
|
||||
line = linecache.getline(filename, lineno)
|
||||
if line: s = s + ': ' + string.strip(line)
|
||||
return s
|
||||
|
||||
# The following two functions can be called by clients to use
|
||||
# a debugger to debug a statement, given as a string.
|
||||
|
||||
def run(self, cmd):
|
||||
modname = self.writetempfile(cmd)
|
||||
self.runctx('import ' + modname + '\n', {}, {})
|
||||
import __main__
|
||||
dict = __main__.__dict__
|
||||
self.runctx(cmd, dict, dict)
|
||||
|
||||
def runctx(self, cmd, globals, locals):
|
||||
self.reset()
|
||||
|
@ -237,18 +256,6 @@ class Bdb: # Basic Debugger
|
|||
del sys.trace
|
||||
# XXX What to do if the command finishes normally?
|
||||
|
||||
def writetempfile(self, cmd):
|
||||
import os
|
||||
modname = 'bdb' + `os.getpid()`
|
||||
filename = '/tmp/' + modname + '.py'
|
||||
f = open(filename, 'w')
|
||||
f.write(cmd + '\n')
|
||||
f.close()
|
||||
import sys
|
||||
if sys.modules.has_key(modname): del sys.modules[modname]
|
||||
if '/tmp' not in sys.path: sys.path.insert(0, '/tmp')
|
||||
return modname
|
||||
|
||||
|
||||
# -------------------- testing --------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue