#9064: accept number of frames for "up" and "down" commands in pdb.

This commit is contained in:
Georg Brandl 2010-06-27 10:37:48 +00:00
parent 952867aa30
commit eb1f4aa232
4 changed files with 42 additions and 20 deletions

View File

@ -210,11 +210,13 @@ w(here)
Print a stack trace, with the most recent frame at the bottom. An arrow
indicates the current frame, which determines the context of most commands.
d(own)
Move the current frame one level down in the stack trace (to a newer frame).
d(own) [*count*]
Move the current frame *count* (default one) levels down in the stack trace
(to a newer frame).
u(p)
Move the current frame one level up in the stack trace (to an older frame).
u(p) [*count*]
Move the current frame *count* (default one) levels up in the stack trace
(to an older frame).
b(reak) [[*filename*:]\ *lineno* | *function*\ [, *condition*]]
With a *lineno* argument, set a break there in the current file. With a

View File

@ -68,13 +68,13 @@ w(here)
An arrow indicates the "current frame", which determines the
context of most commands.
d(own)
Move the current frame one level down in the stack trace
(to a newer frame).
d(own) [ count ]
Move the current frame count (default one) levels down in the
stack trace (to a newer frame).
u(p)
Move the current frame one level up in the stack trace
(to an older frame).
u(p) [ count ]
Move the current frame count (default one) levels up in the
stack trace (to an older frame).
b(reak) [ ([filename:]lineno | function) [, condition] ]
With a filename:line number argument, set a break there. If

View File

@ -618,26 +618,44 @@ class Pdb(bdb.Bdb, cmd.Cmd):
do_w = do_where
do_bt = do_where
def _select_frame(self, number):
assert 0 <= number < len(self.stack)
self.curindex = number
self.curframe = self.stack[self.curindex][0]
self.curframe_locals = self.curframe.f_locals
self.print_stack_entry(self.stack[self.curindex])
self.lineno = None
def do_up(self, arg):
if self.curindex == 0:
print('*** Oldest frame', file=self.stdout)
return
try:
count = int(arg or 1)
except ValueError:
print('*** Invalid frame count (%s)' % arg, file=self.stdout)
return
if count < 0:
newframe = 0
else:
self.curindex = self.curindex - 1
self.curframe = self.stack[self.curindex][0]
self.curframe_locals = self.curframe.f_locals
self.print_stack_entry(self.stack[self.curindex])
self.lineno = None
newframe = max(0, self.curindex - count)
self._select_frame(newframe)
do_u = do_up
def do_down(self, arg):
if self.curindex + 1 == len(self.stack):
print('*** Newest frame', file=self.stdout)
return
try:
count = int(arg or 1)
except ValueError:
print('*** Invalid frame count (%s)' % arg, file=self.stdout)
return
if count < 0:
newframe = len(self.stack) - 1
else:
self.curindex = self.curindex + 1
self.curframe = self.stack[self.curindex][0]
self.curframe_locals = self.curframe.f_locals
self.print_stack_entry(self.stack[self.curindex])
self.lineno = None
newframe = min(len(self.stack) - 1, self.curindex + count)
self._select_frame(newframe)
do_d = do_down
def do_until(self, arg):

View File

@ -456,6 +456,8 @@ C-API
Library
-------
- Issue #9064: pdb's "up" and "down" commands now accept an optional argument.
- Issue #9018: os.path.normcase() now raises a TypeError if the argument is
not ``str`` or ``bytes``.