Make recursive pdb properly invoke IPython's enhanced pdb #10721
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.
The problem is that
Pdb.do_debug
creates a new instance of the originalPdb
rather than our derivedPdb
/TerminalPdb
. So I copied Lib/pdb.py:1087-1102 and made it use our own class instead.I had to:
Pdb
's init signature.use_rawinput
. Without that the propagation ofstdout
triggersuse_rawinput = 0
, breakingTerminalPdb
. This is probably a bug in Python, see: bpo-31078.For IPython 5, the
self.message
lines need to be changed to aprint
. See Lib/pdb.py:712-722 (2.7).Pdb
's prompt calculation? Now it uses(ipdb>)
, adding more parentheses to each nesting level (Pdb
's default prompt is(Pdb)
).Fixes #1273