Pycharm CE 没有在我的 Django 项目中遇到断点

Posted

技术标签:

【中文标题】Pycharm CE 没有在我的 Django 项目中遇到断点【英文标题】:Pycharm CE not hitting breakpoints in my Django project 【发布时间】:2021-04-02 09:49:55 【问题描述】:

我的项目已正确配置为在正确的位置以正确的设置运行 manage.py

我还在一个我确定正在执行的方法中设置了调试断点(我已经在其中放置了一个打印语句并按预期执行)。断点未禁用或有条件:

当我点击“在调试模式下运行”按钮时,使用上面的运行配置(我确定它是同一个,因为它是我为这个项目配置的唯一一个),这是我得到的控制台输出:

pydev debugger: process 38083 is connecting

Connected to pydev debugger (build 192.5728.105)
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 23, 2020 - 19:22:22
Django version 3.1.4, using settings 'FEArena.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

当我尝试在manage.py 中设置断点时,它按预期工作,仅在我点击“调试”按钮时触发。但是,在应用程序启动后,当我使用 REST 客户端触发上述方法时,其中包含断点的方法,断点不会触发,调试器也不会启动。我在 REST 客户端中收到 200 OK 响应,但 PyCharm 不会在任何时候停止并执行调试器。

我查看了其他建议设置“Gevent 兼容调试”的答案(我没有,因为我使用的是社区版),并且我尝试删除项目的 .idea/ 文件夹,这也没有解决问题。我不确定还有什么可能导致这种情况。我只是想调试我的程序。

我的 PyCharm 版本信息是

PyCharm 2019.2 (Community Edition)
Build #PC-192.5728.105, built on July 23, 2019
Runtime version: 11.0.3+12-b304.10 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.7
GC: ParNew, ConcurrentMarkSweep
Memory: 4029M
Cores: 8
Registry: 
Non-Bundled Plugins: com.karateca.jstoolbox, mobi.hsz.idea.latex, net.seesharpsoft.intellij.plugins.csv, nl.rubensten.texifyidea, org.intellij.plugins.markdown

什么可能导致断点无法触发,我该如何解决?我需要断点来调试程序的其他部分。

【问题讨论】:

尝试在manage.py中设置断点并重启,看看是否命中断点。 这种方式对调试没有帮助,但我建议你创建并运行测试 @AlbinPaul 在manage.py 中设置断点按预期工作 - 只要我点击调试按钮就会触发。 我会仔细检查您是否在使用断点所在的函数。一种快速的方法是添加一个 print() 调用。 @schillingt 如上所述,由于 REST 调用,我 100% 确定带有断点的函数正在获得提示。但我确实向该函数添加了一个打印调用,并且它确实按预期执行并打印到控制台,即使它上面的断点没有。 【参考方案1】:

您是否有机会在控制台中运行您的服务器?如果是这种情况,请尝试停止在控制台中运行的服务器并在 PyCharm 中重新启动该服务器

【讨论】:

我不是;我用来运行/调试程序的按钮是 PyCharm 角落里的绿色按钮。 尝试在声明函数的地方设置另一个断点,然后在函数本身内设置断点 两者都没有触发。 看看这个话题然后***.com/questions/39287609/…【参考方案2】:

我之前在 PyCharm 中调用 executor.submit 时遇到了类似的问题。为了重新调用预期的调试行为,我必须插入一行请求代码结果。如果您的代码是线程化的,您可能希望从那里开始。

future = executor.submit(control, channel) # spawn a function control(channel)
print(f'Future result is: future.result()') # new line I had to add to enable debugging

编辑:将链接添加到帮助我在 PyCharm 中实现类似行为的线程。 concurrent.futures.ThreadPoolExecutor doesn't print errors

【讨论】:

除了 Django 对每个 HTTP 请求理所当然地做的事情之外,我并不是故意调用线程、多处理或异步 API,所以我认为我的代码中没有任何地方可以做这种变化。有吗? 我搜索了另一个先前的建议。有些人注意到更改 PyCharm 的变量加载策略可能会有所帮助。你试过这个吗? jetbrains.com/help/pycharm/variables-loading-policy.html 这有更多关于您可能希望选择的选项的具体信息。 intellij-support.jetbrains.com/hc/en-us/community/posts/… 感谢您的建议,但在尝试了所有三个选项后,似乎没有一个可行。 如果您的目标只是重新启用调试,这个 hack 可能会起作用:valentinog.com/blog/pycharm-uvicorn 我还注意到 PyCharm 报告了一个相关的错误问题,但这似乎在很大程度上取决于代码调用方法您没有将其突出显示为潜在原因。希望我有答案!祝你好运..我知道这些令人沮丧!【参考方案3】:

我目前的工作配置是这样的:

它没有任何脚本路径或参数。

当我点击“调试”绿色按钮时,自动启动的命令是: /Users/.../virtualenv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevd.py --multiproc --qt-support=auto --client 127.0.0.1 --port 55583 --file /Users/.../manage.py runserver 8000

你的呢?

【讨论】:

这是来自Professional Addition,其中Django内置作为自己的运行配置类型?这不像我的配置页面(使用 Pycharm 社区版),如上图所示,这是 vanilla python 运行配置。也就是说,我的命令是/Users/.../venv/bin/python /Applications/PyCharm.app/Contents/helpers/pydev/pydevd.py --multiproc --save-signatures --qt-support=auto --client 127.0.0.1 --port 49472 --file /Users/.../manage.py runserver【参考方案4】:

您好,我正在写这个答案,因为我的声誉没有,我无法发表评论。无论如何,您是否安装了 pycharm 不断建议的 cython 调试器工具包?如果是这样,我也面临同样的问题。解决方案是以某种方式删除 cython 加速。您可以按照this 链接进行操作。

基本上你必须进入名为_pydevd_bundle 的目录并删除pydev*.so 文件。现在这需要root权限。如果你有它并且你可以删除它们,那么它很可能会起作用(前提是你已经安装了 cython 调试器扩展)。

【讨论】:

感谢您的建议。我试过这样做,但不幸的是它似乎没有任何效果,即使我重新启动了pycharm。

以上是关于Pycharm CE 没有在我的 Django 项目中遇到断点的主要内容,如果未能解决你的问题,请参考以下文章

在 PyCharm CE 中更改每个文件的突出显示设置(默认情况下)

PyCharm 中的部分存根

PyCharm 中 Django 文档字符串中未解决的引用

Odoo 14 CE 中的可选依赖项

PyCharm 中的 Django 迁移

在我的 Pycharm 中,为啥 df.plot() 不出现在 PyCharm 中?