如何使用VSCode调试器来调试Gunicorn工作进程?

时间:2016-10-04 00:25:00

标签: python debugging visual-studio-code gunicorn

我在Ubuntu 14.04上使用Python 3.4编写了一个GUnicorn / Falcon Web服务。我想使用VSCode调试器来调试此服务。我目前使用命令

启动该过程
/usr/local/bin/gunicorn --config /webapps/connects/routerservice_config.py routerservice:api

使用配置文件routerservice_config.py启动routerervice.py。我在配置中将worker设置为1以保持简单。

我已经将Python扩展安装到VSCode,所以我有Python调试工具。那么我如何附加到GUnicorn工作进程或让VSCode运行启动命令并自动附加。

谢谢, 格雷格

3 个答案:

答案 0 :(得分:6)

launch.json设置在VScode 1.43上对我有用:

{
    "name": "Python: Webapp",
    "type": "python",
    "request": "launch",
    "program": "/home/me/.virtualenvs/my-venv/bin/gunicorn",
    "gevent": true,
    "args": ["main:app", "--bind=127.0.0.1:8080", "--reload", "--worker-class", "eventlet", "-w", "1", "--timeout=7200"],
    "postDebugTask": "killdebugger"
}

使用此设置,我必须在停止调试器后创建一个杀死python进程的任务。这仅仅是因为按下停止按钮会关闭调试器,但是Python进程将继续运行。如果您面临相同的情况,请按F1创建任务,搜索任务,然后单击“配置任务”。然后将以下命令添加到您的task.json中:

{
    "label": "killdebugger",
    "type": "shell",
    "command": "lsof -t -i tcp:8080 | xargs kill -9"
}

如果您没有launch.json中的ki "postDebugTask": "killdebugger"设置问题

答案 1 :(得分:2)

我是扩展程序的作者。 您可以尝试以下方法: https://github.com/DonJayamanne/pythonVSCode/wiki/Debugging:-Remote-Debuging

  • 将以下代码添加到routerervice_config.py(或类似的python启动文件)中 import ptvsd ptvsd.enable_attach("my_secret", address = ('0.0.0.0', 3000))
  • 启动上述申请
  • 进入VS Code然后附加调试器

供参考:
- 这要求您包含ptvsd软件包并在您的应用程序中进行配置 - 计划是添加功能,以便将调试器连接到将来的任何python进程(希望不久的将来)。

答案 2 :(得分:0)

我遇到了同样的问题,并按照此处描述的已接受答案解决了这个问题:Is it possible to run Falcon app from Python?

当 gunicorn 分叉你的进程时,用 VScode 调试器拦截它并不是那么简单。最简单的方法是直接用 python 调用你的 API

from wsgiref import simple_server
import os
import falcon

app = falcon.API()

if __name__ == '__main__':
    with simple_server.make_server('', int(os.getenv('PORT', 5000)), app) as httpd:
        httpd.serve_forever()