From 1548505177f74b4b25a97fe8d3c3dc0d9121994a Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Thu, 28 Feb 2019 19:05:30 +0100 Subject: [PATCH 1/2] bpo-35931: Gracefully handle any exception in pdb debug command This is relevant for `debug doesnotexist()`, which would crash with a NameError otherwise. --- Lib/pdb.py | 12 +++++------- Lib/test/test_pdb.py | 22 ++++++++++++++++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/Lib/pdb.py b/Lib/pdb.py index 1443f9f85c7e12..bf3219af3985da 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1093,16 +1093,14 @@ def do_debug(self, arg): sys.settrace(None) globals = self.curframe.f_globals locals = self.curframe_locals - try: - code = compile(arg, "", "exec") - except SyntaxError: - exc_info = sys.exc_info()[:2] - self.error(traceback.format_exception_only(*exc_info)[-1].strip()) - return p = Pdb(self.completekey, self.stdin, self.stdout) p.prompt = "(%s) " % self.prompt.strip() self.message("ENTERING RECURSIVE DEBUGGER") - sys.call_tracing(p.run, (code, globals, locals)) + try: + sys.call_tracing(p.run, (arg, globals, locals)) + except Exception: + exc_info = sys.exc_info()[:2] + self.error(traceback.format_exception_only(*exc_info)[-1].strip()) self.message("LEAVING RECURSIVE DEBUGGER") sys.settrace(self.trace_dispatch) self.lastcmd = p.lastcmd diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 21f6b7079bb54e..7e03df02946bee 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1486,12 +1486,26 @@ def test_relative_imports_on_plain_module(self): 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', + '> (1)()', + "((Pdb)) *** NameError: name 'doesnotexist' is not defined", + 'LEAVING RECURSIVE DEBUGGER', '(Pdb) ', ]) From f0b1e6bee5e0244d0335bdbd50ccd18ebb25d2b1 Mon Sep 17 00:00:00 2001 From: Zachary Ware Date: Mon, 11 Mar 2019 22:06:49 -0500 Subject: [PATCH 2/2] Add NEWS --- .../NEWS.d/next/Library/2019-03-11-22-06-36.bpo-35931.Qp_Tbe.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2019-03-11-22-06-36.bpo-35931.Qp_Tbe.rst diff --git a/Misc/NEWS.d/next/Library/2019-03-11-22-06-36.bpo-35931.Qp_Tbe.rst b/Misc/NEWS.d/next/Library/2019-03-11-22-06-36.bpo-35931.Qp_Tbe.rst new file mode 100644 index 00000000000000..68c57e2e69df7d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-03-11-22-06-36.bpo-35931.Qp_Tbe.rst @@ -0,0 +1 @@ +The :mod:`pdb` ``debug`` command now gracefully handles all exceptions. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy