编辑:在下面的评论中查看重现,这可能更容易理解 :-)
我正在调查 dart-lang/sdk#56367 ,它显示调试器在断点处暂停,然后显然恢复并在线程/调用堆栈窗口中显示为“运行”。第二个线程也显示为“在入口处暂停”,尽管后来继续了。
我目前还没有这个的重现,但我有捕获的DAP流量日志,与该线程中的视频一起,我已经仔细检查并注解了重要的行:
dap.txt
视频中的 dart-lang/sdk#56367 在大约 0:10 开始调试会话,这与日志文件中的大约 [3:14:12 AM]
相对应。
视频/日志显示:
- 用户开始调试会话(0:10,3:14:12 在日志中)
- 触发断点(视频中的 0:26,日志中的 3:14:26),调用堆栈正确显示线程1在断点处暂停,线程2正在运行
- 调试器神秘地不再暂停(视频中的 0:26),调用堆栈现在显示线程1正在运行(实际上没有),线程2作为“在入口处暂停”(实际上没有,它已经恢复了,VS Code以前已经在过去显示过)
- 用户尝试点击暂停按钮(视频中的 0:33,日志中的 3:14:34),但此时,事情出了问题
DAP流量中没有任何东西可以显示在触发断点后线程1取消暂停,也没有线程2再次变为“在入口处暂停”。我觉得VS Code可能以某种方式应用了过去调用堆栈视图的陈旧状态。有许多不同的线程/调用堆栈请求正在进行-是否有可能其中一个完成并使用发送请求之前的信息更新状态?
如果我能重现这个问题,我会回来回复,但我希望有了视频/日志和上面的信息,了解这段代码的人可能会明白发生了什么。
2条答案
按热度按时间lg40wkob1#
我已经创建了一个我认为是重现这个问题的复现环境:
https://github.com/DanTup/vscode-mock-debug/tree/repro-vscode-224832
模拟调试适配器是这样做的:
线程1在断点处停止,从未恢复。然而,在VS Code中我看到了这样:
编辑: 修正了拼写错误
xghobddn2#
@connor4312 我认为你本月正在使用线程,如果你想查看这个,如果不是,我可以调试它。
感谢重现问题 @DanTup!