gh-84583: Make pdb enter post-mortem mode even for SyntaxError #110883
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In #60384, a special check for
SyntaxErroris introduced inpdb'smain()function to avoid infinite loop inpdbif the source file has aSyntaxError. The solution is not elegant enough as we could have a realSyntaxErrorwhich we want to debug at run-time. #84583 gave an example withast.literal_eval(''). This could happen in other scenarios as well, when we compile dynamically generated code.The original check for
SyntaxErrorwas just to preventpdbfrom stuck, we can easily do that by moving thepdb._user_requested_quitoutside of the try statement, so thequitrequest from post-mortem mode can be respected too.This has one minor behavior change - when the user tries to "exit" from the post mortem debugging, for example, using Ctrl+D or
quitcommand,pdbused to restart the program, now it will exit.I think this is a more reasonable behavior - we told the users explicitly to use
contandstepto restart the program, andexitshould just mean "exit".