`set_trace`-releated deadlock when running inside Ansible with explicit listen-and-debug breakpoint
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 35/100
调研方向
使用包含 debugpy listen-and-wait 代码段的 Ansible lookup plugin 重现该问题,然后将其与提供的 hello-world 脚本进行比较。从 debugpy/_vendored/pydevd/pydevd.py 中的 wait_for_ready_to_run() 附近开始,并使用附带的 launch.json 配置客户端。完成的标准是:在 Ansible 运行期间进行附加不再导致 Variables 一直转圈,也不再导致调试器命令超时。
由索引模型根据 Issue 内容生成。
描述
Environment data
- debugpy version: 1.8.1 (run
import debugpy; print(debugpy.__version__)if uncertain) - OS and version: Mac OS X Sonoma 14.2.1 (23C71)
- Python version: Python 3.11.7 that comes with Mac OS X
- Using VS Code version 1.86.1 (likely irrelevant, as I observe the same behavior with Emacs and dape.el)
Actual behavior
Upon attempting to attach the client,
- Variables → Locals keeps spinning inside VS Code
- Debugger is catatonic; every command times out (same when tried out of Emacs)
- Pressing C-c yields the following stack trace (even after waiting for several minutes):
^CTraceback (most recent call last):
File "/Users/quatrava/Dev/ops/xaasible-ops/ansible-deps-cache/python-libs/lib/python/site-packages/debugpy/_vendored/pydevd/pydevd.py", line 3489, in <module>
[ERROR]: User interrupted execution
main()
File "/Users/quatrava/Dev/ops/xaasible-ops/ansible-deps-cache/python-libs/lib/python/site-packages/debugpy/_vendored/pydevd/pydevd.py", line 3482, in main
globals = debugger.run(setup['file'], None, None, is_module)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/quatrava/Dev/ops/xaasible-ops/ansible-deps-cache/python-libs/lib/python/site-packages/debugpy/_vendored/pydevd/pydevd.py", line 2476, in run
self.wait_for_ready_to_run()
File "/Users/quatrava/Dev/ops/xaasible-ops/ansible-deps-cache/python-libs/lib/python/site-packages/debugpy/_vendored/pydevd/pydevd.py", line 838, in wait_for_ready_to_run
self._py_db_command_thread_event.wait(0.1)
File "/usr/local/Cellar/python@3.11/3.11.7/Frameworks/Python.framework/Versions/3.11/lib/python3.11/threading.py", line 629, in wait
signaled = self._cond.wait(timeout)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/Cellar/python@3.11/3.11.7/Frameworks/Python.framework/Versions/3.11/lib/python3.11/threading.py", line 331, in wait
gotit = waiter.acquire(True, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt
Expected behavior
Debugger session should proceed as usual, even though some slow JSON-RPCs are expected (i.e. because my test case has large visible variables). Note that that is exactly what happens if instead of running Ansible, I run a hello-world Python script that features the same debugpy stanza to await debugger connect, i.e.
import debugpy; debugpy.listen(5678); debugpy.wait_for_client(); debugpy.breakpoint()
print("hello world")
Steps to reproduce:
- Configure VS Code as per the documentation. My
.vscode/launch.jsonis attached below - Install Ansible
- Create
lookup_plugins/my_python_lookup.pyand add the following code inside:from ansible.plugins.lookup import LookupBase class LookupModule(LookupBase): def run(self, terms, variables=None, **kwargs): import debugpy; debugpy.listen(5678); debugpy.wait_for_client(); debugpy.breakpoint() return ["toto"] - Prepare a trivial Ansible playbook that calls
'{{ lookup("my_python_lookup") }}'somewhere - Run the Ansible playbook
Attachments
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Débogueur Python : Attachement à distance",
"type": "debugpy",
"request": "attach",
"connect": {
"host": "localhost",
"port": 5678
},
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "."
}
]
}
]
}
- 主要语言
- Python
- 星标
- 2.5k
- 派生
- 202
- 平均合并
- 5 天 1 小时
- 30 天内合并 PR
- 1
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/debugpy 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 78/100
-
documentation
难度 2/5 1-3 小时 新手友好度 68/100
-
难度 2/5 1-3 小时 新手友好度 78/100
-
documentation
难度 2/5 1-3 小时 新手友好度 62/100
-
难度 3/5 1-2 天 新手友好度 68/100
查看 microsoft/debugpy 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 75/100
stephrobert/dsoxlab#238 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
sublimehq/package_control#1780 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
-
难度 2/5 1-3 小时 新手友好度 70/100
nwg-piotr/nwg-displays#145 ·