Commit 2dfec552 authored by Georg Brandl's avatar Georg Brandl

Allow giving an explicit line number to "until".

parent e0230918
...@@ -330,10 +330,14 @@ by the local file. ...@@ -330,10 +330,14 @@ by the local file.
executes called functions at (nearly) full speed, only stopping at the next executes called functions at (nearly) full speed, only stopping at the next
line in the current function.) line in the current function.)
.. pdbcommand:: unt(il) .. pdbcommand:: unt(il) [lineno]
Continue execution until the line with the line number greater than the Without argument, continue execution until the line with a number greater
current one is reached or when returning from current frame. than the current one is reached.
With a line number, continue execution until a line with a number greater or
equal to that is reached. In both cases, also stop when the current frame
returns.
.. pdbcommand:: r(eturn) .. pdbcommand:: r(eturn)
......
...@@ -174,10 +174,13 @@ class Bdb: ...@@ -174,10 +174,13 @@ class Bdb:
# Derived classes and clients can call the following methods # Derived classes and clients can call the following methods
# to affect the stepping state. # to affect the stepping state.
def set_until(self, frame): #the name "until" is borrowed from gdb def set_until(self, frame, lineno=None):
"""Stop when the line with the line no greater than the current one is """Stop when the line with the line no greater than the current one is
reached or when returning from current frame""" reached or when returning from current frame"""
self._set_stopinfo(frame, frame, frame.f_lineno+1) # the name "until" is borrowed from gdb
if lineno is None:
lineno = frame.f_lineno + 1
self._set_stopinfo(frame, frame, lineno)
def set_step(self): def set_step(self):
"""Stop after one line of code.""" """Stop after one line of code."""
......
...@@ -71,11 +71,11 @@ w(here) ...@@ -71,11 +71,11 @@ w(here)
An arrow indicates the "current frame", which determines the An arrow indicates the "current frame", which determines the
context of most commands. context of most commands.
d(own) [ count ] d(own) [count]
Move the current frame count (default one) levels down in the Move the current frame count (default one) levels down in the
stack trace (to a newer frame). stack trace (to a newer frame).
u(p) [ count ] u(p) [count]
Move the current frame count (default one) levels up in the Move the current frame count (default one) levels up in the
stack trace (to an older frame). stack trace (to an older frame).
...@@ -140,9 +140,12 @@ n(ext) ...@@ -140,9 +140,12 @@ n(ext)
Continue execution until the next line in the current function Continue execution until the next line in the current function
is reached or it returns. is reached or it returns.
unt(il) unt(il) [lineno]
Continue execution until the line with a number greater than Without argument, continue execution until the line with a
the current one is reached or until the current frame returns. number greater than the current one is reached. With a line
number, continue execution until a line with a number greater
or equal to that is reached. In both cases, also stop when
the current frame returns.
r(eturn) r(eturn)
Continue execution until the current function returns. Continue execution until the current function returns.
...@@ -883,7 +886,19 @@ class Pdb(bdb.Bdb, cmd.Cmd): ...@@ -883,7 +886,19 @@ class Pdb(bdb.Bdb, cmd.Cmd):
do_d = do_down do_d = do_down
def do_until(self, arg): def do_until(self, arg):
self.set_until(self.curframe) if arg:
try:
lineno = int(arg)
except ValueError:
print('*** Error in argument:', repr(arg), file=self.stdout)
return
if lineno <= self.curframe.f_lineno:
print('*** "until" line number is smaller than current '
'line number', file=self.stdout)
return
else:
lineno = None
self.set_until(self.curframe, lineno)
return 1 return 1
do_unt = do_until do_unt = do_until
...@@ -1518,8 +1533,8 @@ and in the current directory, if they exist. Commands supplied with ...@@ -1518,8 +1533,8 @@ and in the current directory, if they exist. Commands supplied with
-c are executed after commands from .pdbrc files. -c are executed after commands from .pdbrc files.
To let the script run until an exception occurs, use "-c continue". To let the script run until an exception occurs, use "-c continue".
To let the script run until a given line X in the debugged file, use To let the script run up to a given line X in the debugged file, use
"-c 'break X' -c continue".""" "-c 'until X'"."""
def main(): def main():
import getopt import getopt
......
...@@ -475,6 +475,8 @@ C-API ...@@ -475,6 +475,8 @@ C-API
Library Library
------- -------
- In pdb, allow giving a line number to the "until" command.
- Issue #1437051: For pdb, allow "continue" and related commands in - Issue #1437051: For pdb, allow "continue" and related commands in
.pdbrc files. Also, add a command-line option "-c" that runs a .pdbrc files. Also, add a command-line option "-c" that runs a
command as if given in .pdbrc. command as if given in .pdbrc.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment