gh-108463: Make expressions/statements work as expected in pdb (#108464)

This commit is contained in:
Tian Gao 2023-09-04 14:44:40 -07:00 committed by GitHub
parent 7855d325e6
commit 6304d983a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 0 deletions

View file

@ -252,6 +252,10 @@ change a variable or call a function. When an exception occurs in such a
statement, the exception name is printed but the debugger's state is not statement, the exception name is printed but the debugger's state is not
changed. changed.
.. versionchanged:: 3.13
Expressions/Statements whose prefix is a pdb command are now correctly
identified and executed.
The debugger supports :ref:`aliases <debugger-aliases>`. Aliases can have The debugger supports :ref:`aliases <debugger-aliases>`. Aliases can have
parameters which allows one a certain level of adaptability to the context under parameters which allows one a certain level of adaptability to the context under
examination. examination.

View file

@ -173,6 +173,10 @@ pdb
the new ``exceptions [exc_number]`` command for Pdb. (Contributed by Matthias the new ``exceptions [exc_number]`` command for Pdb. (Contributed by Matthias
Bussonnier in :gh:`106676`.) Bussonnier in :gh:`106676`.)
* Expressions/Statements whose prefix is a pdb command are now correctly
identified and executed.
(Contributed by Tian Gao in :gh:`108464`.)
sqlite3 sqlite3
------- -------

View file

@ -237,6 +237,9 @@ class Pdb(bdb.Bdb, cmd.Cmd):
pass pass
self.allow_kbdint = False self.allow_kbdint = False
self.nosigint = nosigint self.nosigint = nosigint
# Consider these characters as part of the command so when the users type
# c.a or c['a'], it won't be recognized as a c(ontinue) command
self.identchars = cmd.Cmd.identchars + '=.[](),"\'+-*/%@&|<>~^'
# Read ~/.pdbrc and ./.pdbrc # Read ~/.pdbrc and ./.pdbrc
self.rcLines = [] self.rcLines = []

View file

@ -1957,6 +1957,46 @@ def test_pdb_multiline_statement():
(Pdb) c (Pdb) c
""" """
def test_pdb_show_attribute_and_item():
"""Test for multiline statement
>>> def test_function():
... n = lambda x: x
... c = {"a": 1}
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
... pass
>>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE
... 'c["a"]',
... 'c.get("a")',
... 'n(1)',
... 'j=1',
... 'j+1',
... 'r"a"',
... 'next(iter([1]))',
... 'list((0, 1))',
... 'c'
... ]):
... test_function()
> <doctest test.test_pdb.test_pdb_show_attribute_and_item[0]>(5)test_function()
-> pass
(Pdb) c["a"]
1
(Pdb) c.get("a")
1
(Pdb) n(1)
1
(Pdb) j=1
(Pdb) j+1
2
(Pdb) r"a"
'a'
(Pdb) next(iter([1]))
1
(Pdb) list((0, 1))
[0, 1]
(Pdb) c
"""
def test_pdb_issue_20766(): def test_pdb_issue_20766():
"""Test for reference leaks when the SIGINT handler is set. """Test for reference leaks when the SIGINT handler is set.

View file

@ -0,0 +1 @@
Make expressions/statements work as expected in pdb