[3.7] bpo-35931: Gracefully handle any exception in pdb debug command (GH-12103) (GH-12285)



This is relevant for `debug doesnotexist()`, which would crash with a
NameError otherwise.
(cherry picked from commit 3e936431e23b424b1e4665e8165c245924f0ab02)


Co-authored-by: Daniel Hahler <github@thequod.de>


https://bugs.python.org/issue35931
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 5b03b47..f573f5f 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -1482,12 +1482,26 @@
         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)
+    def test_errors_in_command(self):
+        commands = "\n".join([
+            'print(',
+            'debug print(',
+            'debug doesnotexist',
+            'c',
+        ])
+        stdout, _ = self.run_pdb_script('', commands + '\n')
+
         self.assertEqual(stdout.splitlines()[1:], [
             '(Pdb) *** SyntaxError: unexpected EOF while parsing',
-            '(Pdb) *** SyntaxError: unexpected EOF while parsing',
+
+            '(Pdb) ENTERING RECURSIVE DEBUGGER',
+            '*** SyntaxError: unexpected EOF while parsing',
+            'LEAVING RECURSIVE DEBUGGER',
+
+            '(Pdb) ENTERING RECURSIVE DEBUGGER',
+            '> <string>(1)<module>()',
+            "((Pdb)) *** NameError: name 'doesnotexist' is not defined",
+            'LEAVING RECURSIVE DEBUGGER',
             '(Pdb) ',
         ])