mirror of
https://github.com/python/cpython.git
synced 2026-01-26 12:55:08 +00:00
gh-142834: pdb commands command should use last available breakpoint (#142835)
This commit is contained in:
parent
5989095dfd
commit
3cc57505e5
@ -520,7 +520,8 @@ can be overridden by the local file.
|
||||
To remove all commands from a breakpoint, type ``commands`` and follow it
|
||||
immediately with ``end``; that is, give no commands.
|
||||
|
||||
With no *bpnumber* argument, ``commands`` refers to the last breakpoint set.
|
||||
With no *bpnumber* argument, ``commands`` refers to the most recently set
|
||||
breakpoint that still exists.
|
||||
|
||||
You can use breakpoint commands to start your program up again. Simply use
|
||||
the :pdbcmd:`continue` command, or :pdbcmd:`step`,
|
||||
|
||||
@ -1315,7 +1315,14 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
||||
reached.
|
||||
"""
|
||||
if not arg:
|
||||
bnum = len(bdb.Breakpoint.bpbynumber) - 1
|
||||
for bp in reversed(bdb.Breakpoint.bpbynumber):
|
||||
if bp is None:
|
||||
continue
|
||||
bnum = bp.number
|
||||
break
|
||||
else:
|
||||
self.error('cannot set commands: no existing breakpoint')
|
||||
return
|
||||
else:
|
||||
try:
|
||||
bnum = int(arg)
|
||||
|
||||
@ -3478,6 +3478,49 @@ def test_pdb_issue_gh_65052():
|
||||
(Pdb) continue
|
||||
"""
|
||||
|
||||
def test_pdb_commands_last_breakpoint():
|
||||
"""See GH-142834
|
||||
|
||||
>>> def test_function():
|
||||
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
|
||||
... foo = 1
|
||||
... bar = 2
|
||||
|
||||
>>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE
|
||||
... 'break 4',
|
||||
... 'break 3',
|
||||
... 'clear 2',
|
||||
... 'commands',
|
||||
... 'p "success"',
|
||||
... 'end',
|
||||
... 'continue',
|
||||
... 'clear 1',
|
||||
... 'commands',
|
||||
... 'continue',
|
||||
... ]):
|
||||
... test_function()
|
||||
> <doctest test.test_pdb.test_pdb_commands_last_breakpoint[0]>(2)test_function()
|
||||
-> import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
|
||||
(Pdb) break 4
|
||||
Breakpoint 1 at <doctest test.test_pdb.test_pdb_commands_last_breakpoint[0]>:4
|
||||
(Pdb) break 3
|
||||
Breakpoint 2 at <doctest test.test_pdb.test_pdb_commands_last_breakpoint[0]>:3
|
||||
(Pdb) clear 2
|
||||
Deleted breakpoint 2 at <doctest test.test_pdb.test_pdb_commands_last_breakpoint[0]>:3
|
||||
(Pdb) commands
|
||||
(com) p "success"
|
||||
(com) end
|
||||
(Pdb) continue
|
||||
'success'
|
||||
> <doctest test.test_pdb.test_pdb_commands_last_breakpoint[0]>(4)test_function()
|
||||
-> bar = 2
|
||||
(Pdb) clear 1
|
||||
Deleted breakpoint 1 at <doctest test.test_pdb.test_pdb_commands_last_breakpoint[0]>:4
|
||||
(Pdb) commands
|
||||
*** cannot set commands: no existing breakpoint
|
||||
(Pdb) continue
|
||||
"""
|
||||
|
||||
|
||||
@support.force_not_colorized_test_class
|
||||
@support.requires_subprocess()
|
||||
|
||||
@ -0,0 +1 @@
|
||||
Change the :mod:`pdb` ``commands`` command to use the last available breakpoint instead of failing when the most recently created breakpoint was deleted.
|
||||
Loading…
x
Reference in New Issue
Block a user