From 6304d983a0656c1841769bf36e5b42819508d21c Mon Sep 17 00:00:00 2001 From: Tian Gao Date: Mon, 4 Sep 2023 14:44:40 -0700 Subject: gh-108463: Make expressions/statements work as expected in pdb (#108464) --- Doc/library/pdb.rst | 4 +++ Doc/whatsnew/3.13.rst | 4 +++ Lib/pdb.py | 3 ++ Lib/test/test_pdb.py | 40 ++++++++++++++++++++++ .../2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst | 1 + 5 files changed, 52 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst diff --git a/Doc/library/pdb.rst b/Doc/library/pdb.rst index 3aaac15..002eeef 100644 --- a/Doc/library/pdb.rst +++ b/Doc/library/pdb.rst @@ -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 changed. +.. versionchanged:: 3.13 + Expressions/Statements whose prefix is a pdb command are now correctly + identified and executed. + The debugger supports :ref:`aliases `. Aliases can have parameters which allows one a certain level of adaptability to the context under examination. diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst index 5d8ecbb..de23172 100644 --- a/Doc/whatsnew/3.13.rst +++ b/Doc/whatsnew/3.13.rst @@ -173,6 +173,10 @@ pdb the new ``exceptions [exc_number]`` command for Pdb. (Contributed by Matthias 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 ------- diff --git a/Lib/pdb.py b/Lib/pdb.py index 90f26a2..b603aca 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -237,6 +237,9 @@ class Pdb(bdb.Bdb, cmd.Cmd): pass self.allow_kbdint = False 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 self.rcLines = [] diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 734b5c8..a9edd1a 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1957,6 +1957,46 @@ def test_pdb_multiline_statement(): (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() + > (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(): """Test for reference leaks when the SIGINT handler is set. diff --git a/Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst b/Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst new file mode 100644 index 0000000..a5ab8e2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst @@ -0,0 +1 @@ +Make expressions/statements work as expected in pdb -- cgit v0.12