diff options
author | Georg Brandl <georg@python.org> | 2010-06-27 10:37:48 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2010-06-27 10:37:48 (GMT) |
commit | eb1f4aa2321e5ac19e3139858c09e5b1c7acc668 (patch) | |
tree | de43df1847e77c29286046e0d34a6549c6ec3479 /Lib | |
parent | 952867aa306dda2a710df4c286b5d9f0593e3d34 (diff) | |
download | cpython-eb1f4aa2321e5ac19e3139858c09e5b1c7acc668.zip cpython-eb1f4aa2321e5ac19e3139858c09e5b1c7acc668.tar.gz cpython-eb1f4aa2321e5ac19e3139858c09e5b1c7acc668.tar.bz2 |
#9064: accept number of frames for "up" and "down" commands in pdb.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pdb.doc | 12 | ||||
-rwxr-xr-x | Lib/pdb.py | 38 |
2 files changed, 34 insertions, 16 deletions
diff --git a/Lib/pdb.doc b/Lib/pdb.doc index 0d32800..e509f7d 100644 --- a/Lib/pdb.doc +++ b/Lib/pdb.doc @@ -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 @@ -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): |