Debugger does not conform to DAP specification
- 主要语言
- Python
- 星标
- 734
- 派生
- 412
- 平均合并
- 1 天 5 小时
- 30 天内合并 PR
- 8
描述
Per Microsoft's [documentation for the Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol/), a DAP client should send the `launch/attach` request _in parallel_ with the various configuration requests, such as `setBreakpoints` and `setExceptionBreakpoints`. Only once those configuration requests have received responses should the client send `configurationDone`, at which time the adapter will return a response to the original `launch/attach` request. This allows the adapter to fully configure itself before the client considers itself attached.
ipykernel does not currently conform to this specification. It includes a [`_handle_init_sequence`](https://github.com/ipython/ipykernel/blob/main/ipykernel/debugger.py#L252) method which manually sends the `configurationDone` request to the adapter rather than use the original one from the client. It does this in response to the original `attach` request, too, well before the client would have sent that message itself.
**This is problematic because:**
1. This method assumes DAP to work synchronously, whereas by definition the initialization sequence is meant to be conducted in parallel
2. The `configurationDone` request may make it to the adapter before the actual configuration requests (`setBreakpoints`...). This may cause issues (which we have actually seen) where the DAP client receives a response to `attach` before the adapter is done configuring. This leads to breakpoints not being set in time and ultimately being missed.
**The root of this problem** is the synchronous handling of DAP requests by ipykernel; the kernel cannot send Request B until Request A receives a response, so this parallel nature of initialization is currently not possible to conform to.
**The solution to this problem** would be to change how ipykernel handles DAP requests. One solution would be to use a queue to which requests are pushed, similar to how responses are handled. We can implement a working solution and submit a PR, if the maintainers are okay with it.
贡献指南
评估
这个 Issue 还没有评估数据。