Add the "until" command to pdb

This commit is contained in:
Benjamin Peterson 2008-05-11 14:13:25 +00:00
parent aac5c8669f
commit 98353941ea
7 changed files with 49 additions and 16 deletions

View File

@ -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

View File

@ -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.

View File

@ -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)

View File

@ -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.

View File

@ -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()

View File

@ -589,6 +589,7 @@ Nick Russo
Hajime Saitou
Rich Salz
Kevin Samborn
Ilya Sandler
Ty Sarna
Ben Sayer
Michael Scharf

View File

@ -68,6 +68,8 @@ Library
- os.path.walk is deprecated in favor of os.walk.
- pdb gained the "until" command
Build
-----