Visual Studio 代码 Django 调试断点未在视图和模板上触发
Visual Studio Code Django debugging breakpoints not triggered on Views and Templates
我遇到了 VsCode 的调试问题,它无法触发任何类型的断点(标准或日志),但特别是在视图调用和模板上。 Django 项目结构其他部分的断点可以正常工作。例如,在此代码示例中:
class HomeView(TemplateView):
template_name = "home/home.html"
def get(self, request, *args, **kwargs):
return render(request, self.template_name, {})
在Class构造时成功触发template_name = "home/home.html"
上的断点。但是 return render(request, self.template_name, {})
上的断点永远不会触发(我希望它会在用户导航到 URL 这个 class 呈现时触发)。
一些我已经尝试过的东西:
- 禁用除 Python、Jupiter 和 Pylance
之外的所有其他 VsCode 扩展
- 恢复到 VsCode、Python 扩展、PyLance 和 Django
的 4 个月大(我将在下面解释为什么是 4 个月)版本
- 创建上述的基于函数的视图(也不会触发断点)
- 创建一个全新的 Django 项目(能够在一个全新的项目和其他两个现有项目上重现此项目)
4 个月大的时间表是因为我上次使用 Django 和调试 Views 是大约 4 个月前,所以我想我会尝试这些版本。我相当确定我上次尝试这样做时成功了,但我可能弄错了。
作为参考,我使用的是标准 Django 启动配置。我尝试更改 --noreload
和 stopOnEntry
等选项,但这并没有影响结果。复制下面的配置文件以供参考:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\manage.py",
"args": [
"runserver"
],
"django": true
}
]
}
此外,在模板中设置断点也不会触发,在 get 方法调用的函数中设置断点也不会触发(基本上任何 post 查看调用)。
我从文档中看到的一切都表明这应该有效,而且我认为它曾经有效。这次我错过了什么或者有什么变化?
终于想通了。几周前,我为一个项目安装了 gevent (pip install gevent
)。这样做将 GEVENT_SUPPORT=True
添加到我的环境变量中。启用后,这会阻止 VsCode 调试 Python 标准库的线程模块。将此变量更改为 False
为我修复了它(当然我此时没有使用 gevent)。
可以在此处找到有关此问题的更多信息:https://github.com/microsoft/debugpy/issues/189
我遇到了 VsCode 的调试问题,它无法触发任何类型的断点(标准或日志),但特别是在视图调用和模板上。 Django 项目结构其他部分的断点可以正常工作。例如,在此代码示例中:
class HomeView(TemplateView):
template_name = "home/home.html"
def get(self, request, *args, **kwargs):
return render(request, self.template_name, {})
在Class构造时成功触发template_name = "home/home.html"
上的断点。但是 return render(request, self.template_name, {})
上的断点永远不会触发(我希望它会在用户导航到 URL 这个 class 呈现时触发)。
一些我已经尝试过的东西:
- 禁用除 Python、Jupiter 和 Pylance 之外的所有其他 VsCode 扩展
- 恢复到 VsCode、Python 扩展、PyLance 和 Django 的 4 个月大(我将在下面解释为什么是 4 个月)版本
- 创建上述的基于函数的视图(也不会触发断点)
- 创建一个全新的 Django 项目(能够在一个全新的项目和其他两个现有项目上重现此项目)
4 个月大的时间表是因为我上次使用 Django 和调试 Views 是大约 4 个月前,所以我想我会尝试这些版本。我相当确定我上次尝试这样做时成功了,但我可能弄错了。
作为参考,我使用的是标准 Django 启动配置。我尝试更改 --noreload
和 stopOnEntry
等选项,但这并没有影响结果。复制下面的配置文件以供参考:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}\manage.py",
"args": [
"runserver"
],
"django": true
}
]
}
此外,在模板中设置断点也不会触发,在 get 方法调用的函数中设置断点也不会触发(基本上任何 post 查看调用)。
我从文档中看到的一切都表明这应该有效,而且我认为它曾经有效。这次我错过了什么或者有什么变化?
终于想通了。几周前,我为一个项目安装了 gevent (pip install gevent
)。这样做将 GEVENT_SUPPORT=True
添加到我的环境变量中。启用后,这会阻止 VsCode 调试 Python 标准库的线程模块。将此变量更改为 False
为我修复了它(当然我此时没有使用 gevent)。
可以在此处找到有关此问题的更多信息:https://github.com/microsoft/debugpy/issues/189