mirror of https://github.com/python/cpython
gh-104301: Allow leading whitespace in disambiguated pdb statements (#104342)
This commit is contained in:
parent
27419a71b5
commit
0449ffe3a4
|
@ -602,9 +602,17 @@ can be overridden by the local file.
|
|||
|
||||
Execute the (one-line) *statement* in the context of the current stack frame.
|
||||
The exclamation point can be omitted unless the first word of the statement
|
||||
resembles a debugger command. To set a global variable, you can prefix the
|
||||
assignment command with a :keyword:`global` statement on the same line,
|
||||
e.g.::
|
||||
resembles a debugger command, e.g.:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
(Pdb) ! n=42
|
||||
(Pdb)
|
||||
|
||||
To set a global variable, you can prefix the assignment command with a
|
||||
:keyword:`global` statement on the same line, e.g.:
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
(Pdb) global list_options; list_options = ['-l']
|
||||
(Pdb)
|
||||
|
|
11
Lib/pdb.py
11
Lib/pdb.py
|
@ -440,7 +440,7 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
self.message(repr(obj))
|
||||
|
||||
def default(self, line):
|
||||
if line[:1] == '!': line = line[1:]
|
||||
if line[:1] == '!': line = line[1:].strip()
|
||||
locals = self.curframe_locals
|
||||
globals = self.curframe.f_globals
|
||||
try:
|
||||
|
@ -1642,9 +1642,12 @@ class Pdb(bdb.Bdb, cmd.Cmd):
|
|||
|
||||
Execute the (one-line) statement in the context of the current
|
||||
stack frame. The exclamation point can be omitted unless the
|
||||
first word of the statement resembles a debugger command. To
|
||||
assign to a global variable you must always prefix the command
|
||||
with a 'global' command, e.g.:
|
||||
first word of the statement resembles a debugger command, e.g.:
|
||||
(Pdb) ! n=42
|
||||
(Pdb)
|
||||
|
||||
To assign to a global variable you must always prefix the command with
|
||||
a 'global' command, e.g.:
|
||||
(Pdb) global list_options; list_options = ['-l']
|
||||
(Pdb)
|
||||
"""
|
||||
|
|
|
@ -5283,11 +5283,14 @@ topics = {'assert': 'The "assert" statement\n'
|
|||
'current\n'
|
||||
' stack frame. The exclamation point can be omitted unless the '
|
||||
'first\n'
|
||||
' word of the statement resembles a debugger command. To set '
|
||||
'a\n'
|
||||
' global variable, you can prefix the assignment command with '
|
||||
'a\n'
|
||||
' "global" statement on the same line, e.g.:\n'
|
||||
' word of the statement resembles a debugger command, e.g.:'
|
||||
'\n'
|
||||
' (Pdb) ! n=42\n'
|
||||
' (Pdb)\n'
|
||||
'\n'
|
||||
' To set a global variable, you can prefix the assignment command '
|
||||
' with \n'
|
||||
' a "global" statement on the same line, e.g.:\n'
|
||||
'\n'
|
||||
" (Pdb) global list_options; list_options = ['-l']\n"
|
||||
' (Pdb)\n'
|
||||
|
|
|
@ -1798,6 +1798,29 @@ def test_pdb_issue_gh_101517():
|
|||
(Pdb) continue
|
||||
"""
|
||||
|
||||
def test_pdb_ambiguous_statements():
|
||||
"""See GH-104301
|
||||
|
||||
Make sure that ambiguous statements prefixed by '!' are properly disambiguated
|
||||
|
||||
>>> with PdbTestInput([
|
||||
... '! n = 42', # disambiguated statement: reassign the name n
|
||||
... 'n', # advance the debugger into the print()
|
||||
... 'continue'
|
||||
... ]):
|
||||
... n = -1
|
||||
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
|
||||
... print(f"The value of n is {n}")
|
||||
> <doctest test.test_pdb.test_pdb_ambiguous_statements[0]>(8)<module>()
|
||||
-> print(f"The value of n is {n}")
|
||||
(Pdb) ! n = 42
|
||||
(Pdb) n
|
||||
The value of n is 42
|
||||
> <doctest test.test_pdb.test_pdb_ambiguous_statements[0]>(1)<module>()
|
||||
-> with PdbTestInput([
|
||||
(Pdb) continue
|
||||
"""
|
||||
|
||||
|
||||
@support.requires_subprocess()
|
||||
class PdbTestCase(unittest.TestCase):
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Allow leading whitespace in disambiguated statements in :mod:`pdb`.
|
Loading…
Reference in New Issue