mirror of https://github.com/python/cpython
Add the "until" command to pdb
This commit is contained in:
parent
aac5c8669f
commit
98353941ea
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
33
Lib/bdb.py
33
Lib/bdb.py
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
13
Lib/pdb.py
13
Lib/pdb.py
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue