]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-108463: Make expressions/statements work as expected in pdb (#108464)
authorTian Gao <gaogaotiantian@hotmail.com>
Mon, 4 Sep 2023 21:44:40 +0000 (14:44 -0700)
committerGitHub <noreply@github.com>
Mon, 4 Sep 2023 21:44:40 +0000 (21:44 +0000)
Doc/library/pdb.rst
Doc/whatsnew/3.13.rst
Lib/pdb.py
Lib/test/test_pdb.py
Misc/NEWS.d/next/Library/2023-08-25-00-14-34.gh-issue-108463.mQApp_.rst [new file with mode: 0644]

index 3aaac15ee5780c1d2b98a0a864667076c9a8c020..002eeef4c09b5d29ee02c1d4f01cdceb6f6ccda9 100644 (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
 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
 parameters which allows one a certain level of adaptability to the context under
 examination.
index 5d8ecbb193f157471ff1c50e9d9addd85c6dc62b..de23172ac7a43b1510ea9872fa811f18b5982e90 100644 (file)
@@ -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
 -------
 
index 90f26a2eb99848ab21ca641248704009595f4fe8..b603aca8c04ee3fa97f384bc636f60581e95237b 100755 (executable)
@@ -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 = []
index 734b5c83cdff7de1c106d466f2c3ba3bb3fca9aa..a9edd1a4d83cd96751f701edf4cc720ac9e06951 100644 (file)
@@ -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()
+    > <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():
     """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 (file)
index 0000000..a5ab8e2
--- /dev/null
@@ -0,0 +1 @@
+Make expressions/statements work as expected in pdb