diff options
-rw-r--r-- | Doc/library/bdb.rst | 5 | ||||
-rw-r--r-- | Doc/library/pdb.rst | 6 | ||||
-rw-r--r-- | Lib/bdb.py | 33 | ||||
-rw-r--r-- | Lib/pdb.doc | 5 | ||||
-rwxr-xr-x | Lib/pdb.py | 13 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
7 files changed, 49 insertions, 16 deletions
diff --git a/Doc/library/bdb.rst b/Doc/library/bdb.rst index cf8f447..82a1c21 100644 --- a/Doc/library/bdb.rst +++ b/Doc/library/bdb.rst @@ -207,6 +207,11 @@ The :mod:`bdb` module also defines two classes: Stop when returning from the given frame. + .. method:: set_until(frame) + + Stop when the line with the line no greater than the current one is + reached or when returning from current frame + .. method:: set_trace([frame]) Start debugging from *frame*. If *frame* is not specified, debugging diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst index 0d2a936..4eeec1e 100644 --- a/Doc/library/pdb.rst +++ b/Doc/library/pdb.rst @@ -267,6 +267,12 @@ n(ext) inside a called function, while ``next`` executes called functions at (nearly) full speed, only stopping at the next line in the current function.) +unt(il) + Continue execution until the line with the the line number greater than the + current one is reached or when returning from current frame + + .. versionadded:: 2.6 + r(eturn) Continue execution until the current function returns. @@ -37,9 +37,7 @@ class Bdb: import linecache linecache.checkcache() self.botframe = None - self.stopframe = None - self.returnframe = None - self.quitting = 0 + self._set_stopinfo(None, None) def trace_dispatch(self, frame, event, arg): if self.quitting: @@ -100,7 +98,7 @@ class Bdb: # (CT) stopframe may now also be None, see dispatch_call. # (CT) the former test for None is therefore removed from here. if frame is self.stopframe: - return True + return frame.f_lineno >= self.stoplineno while frame is not None and frame is not self.stopframe: if frame is self.botframe: return True @@ -157,26 +155,31 @@ class Bdb: but only if we are to stop at or just below this level.""" pass + def _set_stopinfo(self, stopframe, returnframe, stoplineno=-1): + self.stopframe = stopframe + self.returnframe = returnframe + self.quitting = 0 + self.stoplineno = stoplineno + # Derived classes and clients can call the following methods # to affect the stepping state. + def set_until(self, frame): #the name "until" is borrowed from gdb + """Stop when the line with the line no greater than the current one is + reached or when returning from current frame""" + self._set_stopinfo(frame, frame, frame.f_lineno+1) + def set_step(self): """Stop after one line of code.""" - self.stopframe = None - self.returnframe = None - self.quitting = 0 + self._set_stopinfo(None,None) def set_next(self, frame): """Stop on the next line in or below the given frame.""" - self.stopframe = frame - self.returnframe = None - self.quitting = 0 + self._set_stopinfo(frame, None) def set_return(self, frame): """Stop when returning from the given frame.""" - self.stopframe = frame.f_back - self.returnframe = frame - self.quitting = 0 + self._set_stopinfo(frame.f_back, frame) def set_trace(self, frame=None): """Start debugging from `frame`. @@ -195,9 +198,7 @@ class Bdb: def set_continue(self): # Don't stop except at breakpoints or when finished - self.stopframe = self.botframe - self.returnframe = None - self.quitting = 0 + self._set_stopinfo(self.botframe, None) if not self.breaks: # no breakpoints; run without debugger overhead sys.settrace(None) diff --git a/Lib/pdb.doc b/Lib/pdb.doc index c513954..1cd2f19 100644 --- a/Lib/pdb.doc +++ b/Lib/pdb.doc @@ -128,6 +128,11 @@ n(ext) Continue execution until the next line in the current function is reached or it returns. +unt(il) + Continue execution until the line with a number greater than the + current one is reached or until the current frame returns + + r(eturn) Continue execution until the current function returns. @@ -612,6 +612,11 @@ class Pdb(bdb.Bdb, cmd.Cmd): self.lineno = None do_d = do_down + def do_until(self, arg): + self.set_until(self.curframe) + return 1 + do_unt = do_until + def do_step(self, arg): self.set_step() return 1 @@ -962,6 +967,14 @@ i.e., the breakpoint is made unconditional.""" Execute the current line, stop at the first possible occasion (either in a function that is called or in the current function).""" + def help_until(self): + self.help_unt() + + def help_unt(self): + print """unt(il) +Continue execution until the line with a number greater than the current +one is reached or until the current frame returns""" + def help_next(self): self.help_n() @@ -589,6 +589,7 @@ Nick Russo Hajime Saitou Rich Salz Kevin Samborn +Ilya Sandler Ty Sarna Ben Sayer Michael Scharf @@ -68,6 +68,8 @@ Library - os.path.walk is deprecated in favor of os.walk. +- pdb gained the "until" command + Build ----- |