docker Odoo Remote Attach VSCode未命中断点

6yoyoihd  于 2024-01-06  发布在  Docker
关注(0)|答案(1)|浏览(118)

我正在尝试调试Odoo,但没有成功。Docker compose启动了Odoo的环境,因此它已经构建好了。这是我的启动文件:

{
    "version": "0.2.0",
    "env": {
        "GEVENT_SUPPORT": "True"
    },
    "configurations": [
        {
            "name": "Debug",
            "type": "python",
            "request": "attach",
            "connect": {
                "host": "127.0.0.1",
                "port": 5678
            },
            "pathMappings": [
                {
                    "localRoot": "/local_folder/odoo",
                    "remoteRoot": "/remote_folder/odoo",
                }
            ],
            "justMyCode": true
        }
    ]
}

字符串
在Dockerfile中,我使用RUN pip3 install debugpy构建了镜像。
这是编写文件的命令条目:

ports:
  - "8069:8069"
  - "5678:5678"
expose:
  - 8069
  - 5678    
command: "python3 -m debugpy --listen  0.0.0.0:5678  --wait-for-client  /path_to_odoo/odoo-bin args"


所以容器正在等待我正常开始调试,但是当我尝试特定操作时,调试器不会在任何断点处停止。断点是红色的,所以vscode确实看到了远程文件。地址是否仍然是localhost:8069?使用netstat显示8069和5678正在侦听,但无法使调试器工作。容器中的debugpy版本为1.8,但已使用1.6但没有成功,知道问题出在哪吗

bybem2ql

bybem2ql1#

我设法让它“工作”。这是一个错误已经报告在这里:
https://github.com/microsoft/debugpy/issues/1206
当我删除GEVENT_SUPPORT=True或将其设置为False时,会遇到断点,但一旦我这样做,我就会收到垃圾邮件:
似乎正在使用gevent monkey-patching。请设置环境变量:GEVENT_SUPPORT=True以在调试器中启用gevent支持。
因此,当前能够使用vscode调试器的解决方案是注解或删除GEVENT_SUPPORT并创建一个自定义入口点,这样您就不会收到提到的垃圾邮件。
创建odoo_custom.py文件:

#!/usr/bin/env python3

import sys
sys.path.append('/path/to/project_folder/framework')

# enable gevent support in the debugger

__import__('os').environ['GEVENT_SUPPORT'] = 'true'

# set server timezone in UTC before time module imported
__import__('os').environ['TZ'] = 'UTC'

# import and run odoo-bin
if __name__ == "__main__":
    with open("/path/to/project_folder/framework/odoo-bin") as f:
        code = compile(f.read(), "odoo-bin", 'exec')
        exec(code)

字符串
最后,在你的作品中加入这个:

"python3 -m debugpy --listen  0.0.0.0:5678  --wait-for-client  /project_folder/custom.py args"


两天前,2024年1月3日,这个问题已经关闭,他们将在python 3.12+中修复它,旧的python版本仍然必须使用这个解决方案。

相关问题