Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

`set_trace`-releated deadlock when running inside Ansible with explicit listen-and-debug breakpoint

未关闭
#1,519 5 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
ansible, python
领域
devops, devtools

调研方向

使用包含 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:

  1. Configure VS Code as per the documentation. My .vscode/launch.json is attached below
  2. Install Ansible
  3. Create lookup_plugins/my_python_lookup.py and 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"]
    
  4. Prepare a trivial Ansible playbook that calls '{{ lookup("my_python_lookup") }}' somewhere
  5. 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

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

microsoft/debugpy 的其他 Issue

查看 microsoft/debugpy 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。