diff options
author | Tian Gao <gaogaotiantian@hotmail.com> | 2023-10-15 10:55:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-15 10:55:00 (GMT) |
commit | fa18b0afe47615dbda15407a102b84e40cadf6a5 (patch) | |
tree | 23b203670098ab160fa4511157d9e1852cdae2e8 /Lib | |
parent | 84b7e9e3fa67fb9b92088d17839d8235f1cec62e (diff) | |
download | cpython-fa18b0afe47615dbda15407a102b84e40cadf6a5.zip cpython-fa18b0afe47615dbda15407a102b84e40cadf6a5.tar.gz cpython-fa18b0afe47615dbda15407a102b84e40cadf6a5.tar.bz2 |
gh-84583: Make pdb enter post-mortem mode even for SyntaxError (#110883)
Diffstat (limited to 'Lib')
-rwxr-xr-x | Lib/pdb.py | 9 | ||||
-rw-r--r-- | Lib/test/test_pdb.py | 17 |
2 files changed, 19 insertions, 7 deletions
@@ -2151,9 +2151,6 @@ def main(): while True: try: pdb._run(target) - if pdb._user_requested_quit: - break - print("The program finished and will be restarted") except Restart: print("Restarting", target, "with arguments:") print("\t" + " ".join(sys.argv[1:])) @@ -2161,9 +2158,6 @@ def main(): # In most cases SystemExit does not warrant a post-mortem session. print("The program exited via sys.exit(). Exit status:", end=' ') print(e) - except SyntaxError: - traceback.print_exc() - sys.exit(1) except BaseException as e: traceback.print_exc() print("Uncaught exception. Entering post mortem debugging") @@ -2171,6 +2165,9 @@ def main(): pdb.interaction(None, e) print("Post mortem debugger finished. The " + target + " will be restarted") + if pdb._user_requested_quit: + break + print("The program finished and will be restarted") # When invoked as main program, invoke the debugger on a script diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index ff677ae..a668b6c 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -2638,13 +2638,28 @@ def bœr(): commands = '' expected = "SyntaxError:" stdout, stderr = self.run_pdb_script( - script, commands, expected_returncode=1 + script, commands ) self.assertIn(expected, stdout, '\n\nExpected:\n{}\nGot:\n{}\n' 'Fail to handle a syntax error in the debuggee.' .format(expected, stdout)) + def test_issue84583(self): + # A syntax error from ast.literal_eval should not make pdb exit. + script = "import ast; ast.literal_eval('')\n" + commands = """ + continue + where + quit + """ + stdout, stderr = self.run_pdb_script(script, commands) + # The code should appear 3 times in the stdout: + # 1. when pdb starts + # 2. when the exception is raised, in trackback + # 3. in where command + self.assertEqual(stdout.count("ast.literal_eval('')"), 3) + def test_issue26053(self): # run command of pdb prompt echoes the correct args script = "print('hello')" |