gpt4 book ai didi

python - 如何在开启自动重新加载的情况下在 VSCode 中调试 Django

转载 作者:行者123 更新时间:2023-12-04 16:26:23 48 4
gpt4 key购买 nike

我在 VSCode(Django 应用程序)中设置了调试,它在默认设置下运行良好。但是,在调试时似乎无法自动重新加载。这在 VSCode docs 中有说明:

Note that automatic reloading of Django apps is not possible while debugging.


我想知道是否有某种方法可以使调试(断点等)工作 在 Django 中启用重新加载。

最佳答案

事实证明,您可以使用 Microsoft 的 debugpy 来完成这项工作。工具。
Django 在重新加载时启动两个进程(默认),其中一个是父进程,另一个是执行重新加载魔法的子进程。
Django通过设置环境变量RUN_MAIN来区分这两个进程在子进程中为真(重新加载)。引用:https://github.com/django/django/blob/8a902b7ee622ada258d15fb122092c1f02b82698/django/utils/autoreload.py#L241
通过调整 manage.py稍微,我们可以在父进程中启动一个调试监听器,并让它在任何重新加载后都能存活。

  • 添加 debugpy无论您如何管理您的需求(requirements.txt 等)
  • 添加以下函数以初始化调试器:
  • def initialize_debugger():
    import debugpy

    # optionally check to see what env you're running in, you probably only want this for
    # local development, for example: if os.getenv("MY_ENV") == "dev":

    # RUN_MAIN envvar is set by the reloader to indicate that this is the
    # actual thread running Django. This code is in the parent process and
    # initializes the debugger
    if not os.getenv("RUN_MAIN"):
    debugpy.listen(("0.0.0.0", 9999))
    sys.stdout.write("Start the VS Code debugger now, waiting...\n")
    debugpy.wait_for_client()
    sys.stdout.write("Debugger attached, starting server...\n")

  • 更改 main manage.py 中的函数如下:
  •     def main()
    # <...>
    initialize_debugger() # add this
    execute_from_command_line(sys.argv)

  • 修改 VSCode 中的 launch.json 配置以附加到端口 9999(从上面):
  •         {
    "name": "Python: Remote Attach (DebugPy)",
    "type": "python",
    "request": "attach",
    "port": 9999,
    "host": "localhost",
    },
    提示:您可以禁用“未捕获的异常”,因为重新加载本身会导致 SystemExit

    关于python - 如何在开启自动重新加载的情况下在 VSCode 中调试 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62944425/

    48 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com