Open
Conversation
64c0dfc to
6c8f97b
Compare
6c8f97b to
a6974a6
Compare
f0215b9 to
0a18932
Compare
f5c7e06 to
0726567
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Branched from #1170
Backend side of posit-dev/positron#13205
Part of posit-dev/positron#12104
Implements notebook debugging via the Jupyter Debug Protocol. DAP messages flow through
debug_request/debug_replyon the Control socket, with events forwarded asdebug_eventon IOPub.Since notebook cells aren't files on disk, the Jupyter Debug Protocol uses
dumpCellto write cell source code to deterministic temp files (path derived from a MurmurHash2 of the code). The frontend sendsdumpCellbeforesetBreakpoints, so breakpoints reference these temp files.When execute requests contain a
cellId, breakpoints and line directives are mapped to the temp files written bydumpCell. This allows users to execute and inject breakpoints at the same time, outside of a debugging session. Otherwise they'd need to start a debugging session with Debug Cell, then go back and reexecute cells containing breakpoints.In addition:
Interrupts in notebook mode now quit the debugger with
Qif active. This fits the notebook UX because, unlike in Console mode, the kernel remains busy for the duration of the debugging session, and the notebook UI shows an Interrupt button next to the cell. If we don't quit the debugger, the cell will remain in busy state after interrupting, which is confusing.Debugging prompts created via
browser()ordebug()(as opposed to breakpoints) map to StdIn. Not the best UI in Positron (stdin prompts show via command palette) but much better than doing nothing. The alternative would be to initiate a full debug session from the backend, but this would require non-standard frontend changes.Screen.Recording.2026-04-25.at.11.11.03.mov