#9064: accept number of frames for "up" and "down" commands in pdb.
authorGeorg Brandl <georg@python.org>
Sun, 27 Jun 2010 10:37:48 +0000 (10:37 +0000)
committerGeorg Brandl <georg@python.org>
Sun, 27 Jun 2010 10:37:48 +0000 (10:37 +0000)
Doc/library/pdb.rst
Lib/pdb.doc
Lib/pdb.py
Misc/NEWS

index 47a11ed022795d2b19b948ca018a70fbdf8a9b76..9a333494cd37685d9f32fd4e314b9b7935e65bd1 100644 (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
index 0d32800ff6c891fd791d1361b3abb5e5b24eff0d..e509f7da65532c6e005bc7c177f8e9c7df523e71 100644 (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
index b15a3d160040f74c6abc5791e22d7272f6226be8..43520d6b01d6d702fc7dbafa7ce9691511c3abb0 100755 (executable)
@@ -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):
index a9b19dc20db938e04ca80ba151e4f38e19b23428..1cb8c43343bba9a0ea2c16ae86611412f4dc8fed 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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``.