[Python-checkins] r63061 - in python/trunk: Doc/library/bdb.rst Doc/library/pdb.rst Lib/bdb.py Lib/pdb.doc Lib/pdb.py Misc/ACKS Misc/NEWS

benjamin.peterson python-checkins at python.org
Sun May 11 16:13:26 CEST 2008


Author: benjamin.peterson
Date: Sun May 11 16:13:25 2008
New Revision: 63061

Log:
Add the "until" command to pdb


Modified:
   python/trunk/Doc/library/bdb.rst
   python/trunk/Doc/library/pdb.rst
   python/trunk/Lib/bdb.py
   python/trunk/Lib/pdb.doc
   python/trunk/Lib/pdb.py
   python/trunk/Misc/ACKS
   python/trunk/Misc/NEWS

Modified: python/trunk/Doc/library/bdb.rst
==============================================================================
--- python/trunk/Doc/library/bdb.rst	(original)
+++ python/trunk/Doc/library/bdb.rst	Sun May 11 16:13:25 2008
@@ -207,6 +207,11 @@
 
       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

Modified: python/trunk/Doc/library/pdb.rst
==============================================================================
--- python/trunk/Doc/library/pdb.rst	(original)
+++ python/trunk/Doc/library/pdb.rst	Sun May 11 16:13:25 2008
@@ -267,6 +267,12 @@
    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.
 

Modified: python/trunk/Lib/bdb.py
==============================================================================
--- python/trunk/Lib/bdb.py	(original)
+++ python/trunk/Lib/bdb.py	Sun May 11 16:13:25 2008
@@ -37,9 +37,7 @@
         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 @@
         # (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 @@
         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 @@
 
     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)

Modified: python/trunk/Lib/pdb.doc
==============================================================================
--- python/trunk/Lib/pdb.doc	(original)
+++ python/trunk/Lib/pdb.doc	Sun May 11 16:13:25 2008
@@ -128,6 +128,11 @@
         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.
 

Modified: python/trunk/Lib/pdb.py
==============================================================================
--- python/trunk/Lib/pdb.py	(original)
+++ python/trunk/Lib/pdb.py	Sun May 11 16:13:25 2008
@@ -612,6 +612,11 @@
             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 @@
 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()
 

Modified: python/trunk/Misc/ACKS
==============================================================================
--- python/trunk/Misc/ACKS	(original)
+++ python/trunk/Misc/ACKS	Sun May 11 16:13:25 2008
@@ -589,6 +589,7 @@
 Hajime Saitou
 Rich Salz
 Kevin Samborn
+Ilya Sandler
 Ty Sarna
 Ben Sayer
 Michael Scharf

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sun May 11 16:13:25 2008
@@ -68,6 +68,8 @@
 
 - os.path.walk is deprecated in favor of os.walk.
 
+- pdb gained the "until" command
+
 Build
 -----
 


More information about the Python-checkins mailing list