vscode 回归:调试器无法附加到子进程

zzzyeukh  于 6个月前  发布在  Vscode
关注(0)|答案(9)|浏览(68)

当所有扩展都被禁用时,这个问题是否会发生?:否(但请阅读描述)

  • VS Code 版本:1.74.0 及更新版本
  • OS 版本:MacOS Ventura 13.1

已安装的扩展:

  • ms-python.python
    摘要: Python 调试器无法附加到子进程,并因 "Failed to launch debugger for child process" 消息而失败。此问题在此提交,而不是在 Python 扩展存储库中,因为它是 #166137 之后的一个回归。
    更长的解释: 当使用类似 debugpy 的调试服务器并从 VSCode(一个普通的远程附加启动配置)附加到它时,调试器在 os.execv() 调用(以及我认为类似的方法)之后断开连接。这个问题从 VSCode 1.74.0 开始出现,在 1.73.1 中工作得非常好。起初我以为这是 Python 扩展的问题,但是即使在降级扩展后,问题仍然存在。然后我和 git bisect 一起坐下来,从源代码编译 VSCode,并找到了导致问题的 PR:#166137 。我还不确定为什么这会破坏调试。我已经制作了一个 MCVE 和一个屏幕录制,显示了重现过程:

Screen.Recording.2023-01-13.at.10.14.57.mov
python-debugger-reproduction.zip

cgvd09ve

cgvd09ve1#

感谢您提出这个问题!看起来您可能正在使用旧版本的VS Code,最新稳定版本是1.74.3。请尝试升级到最新版本并检查此问题是否仍然存在。
快乐编码!

enxuqcxy

enxuqcxy2#

是的,我忘了提到这个问题在1.74.3版本和内测版中也存在。

pftdvrlh

pftdvrlh3#

感谢您的二分查找!我可以复现。

t9eec4r0

t9eec4r04#

这是我的理解:

  • 向子进程发送一个 debugpyAttach 请求
  • 父会话终止
  • vscode 发送断开连接请求并等待响应,然后停止父进程
  • Python 扩展调用 startDebugging 以启动子会话
  • 由于新的 await,当 vscode 收到 startDebugging 调用时,父进程已经死亡
  • vscode 由于无法以已死亡的父会话的子进程的身份请求启动会话而无法启动子会话

因此,我认为 debugpy 或 Python 扩展在有待处理的 debugpyAttach 请求时不应终止父会话,以避免这种情况。虽然有点棘手,但我认为 vscode 这样做是有道理的。你怎么看 @int19h@fabioz

vlju58qv

vlju58qv5#

调试器那边也有很多异步操作,导致了 microsoft/debugpy#43
我们已经很久没有研究这个问题了,但据我回忆,问题的一部分也是UI - 基本上,当父进程在树中消失时,VSCode不喜欢它,而子进程仍然在其下存活。现在它是受支持的吗?

flseospp

flseospp6#

我相信,对于这个案例仍然存在一个未解决的问题。

tmb3ates

tmb3ates7#

各位,关于这个有什么消息吗?

9ceoxa92

9ceoxa928#

当您提到 vscode fails to start the child session, because you can't request to start a session as a child of a dead parent session 时,您是指我们收到一条消息,表示调试适配器无效吗?
我问这个问题是因为我正在尝试调试一个类似的场景,这就是我最终得到的结果。

vq8itlhq

vq8itlhq9#

Dzien Dobry @kamildoleglo!
你是否有机会解决这个问题?

相关问题