bpo-35931: Gracefully handle SyntaxError in pdb debug command (GH-11782)


Previously, `debug print(` would cause the interpreter to exit on a SyntaxError whereas `print(` would properly display the error and return to the pdb prompt.

This patch fixes this by pre-compiling the code before passing it to `Pdb.run`.

https://bugs.python.org/issue35931
(cherry picked from commit 4327705cfab3eb09073ec828570bbd8f789e1611)

Co-authored-by: Daniel Hahler <github@thequod.de>
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 9aa38e0..5b03b47 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -1482,6 +1482,14 @@
         stdout, _ = self._run_pdb(['-m', self.module_name + '.runme'], commands)
         self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout)
 
+    def test_syntaxerror_in_command(self):
+        commands = "print(\ndebug print("
+        stdout, _ = self.run_pdb_script("", commands)
+        self.assertEqual(stdout.splitlines()[1:], [
+            '(Pdb) *** SyntaxError: unexpected EOF while parsing',
+            '(Pdb) *** SyntaxError: unexpected EOF while parsing',
+            '(Pdb) ',
+        ])
 
 def load_tests(*args):
     from test import test_pdb