python断点调试不起作用flask_pycharm和flask autoreload和断点不起作用

PyCharm在调试Flask应用时,由于Werkzeug的自动重载功能,导致断点不起作用。解决方案包括禁用重载器,使用“仅限单一实例”的配置,通过Ctrl-D手动重启调试器,或者使用Python内置的pdb进行调试。此外,还可以检查运行配置中的FLASK_DEBUG选项或确保在Docker环境中运行时选择正确的设置。
摘要由CSDN通过智能技术生成

6 个答案:

答案 0 :(得分:19)

我将从简短的回答开始:不,你想要的任何版本的PyCharm都不能用到4.0.1。

问题在于,当您使用重新加载器时,Flask应用程序在子进程中运行,因此PyCharm调试器附加到主进程并且无法控制子进程。

在我看来,解决这个问题的最佳方法是让Jetbrains在他们的IDE中构建一个“重启更新”功能。然后你根本不需要使用Werkzeug的重新加载器,你可以直接从PyCharm获得相同的功能。

在Jetbrains决定实施此功能之前,我可以分享我的解决方法,这并不是非常糟糕。

在“编辑配置”中,将要使用的配置设置为“仅限单一实例”(对话框右上角的复选框)

确保配置是活动配置。

将Flask应用配置为不使用Werkzeug重新加载器。

按Ctrl-D开始调试(在Mac上,其他人可能有不同的快捷方式)

断点应该可以正常工作,因为重新加载器不活动。

进行所需的任何代码更改。

准备好重新启动时,再次按Ctrl-D。第一次执行此操作时,您将收到确认提示,例如“停止并重新启动?”。说是,并选中“不再显示”复选框。

现在,您可以在需要时按Ctrl-D快速重启调试器。

我同意这不完美,但一旦Ctrl-D进入你的肌肉记忆,你甚至都不会想到它。

祝你好运!

答案 1 :(得分:1)

问题是因为使用use_reloader=True werkzeug应用程序是在主应用程序的单独(子)线程中启动而PyCharm无法正确处理断点,因为它们在线程启动时丢失。

我建议使用像pdb这样的Python-ish,即:

@app.route('/')

def main(page):

import pdb; pdb.set_trace() # This line actually stops application execution

# and starts Python debug shell in the console

# where you can examine current scope and continue

# normal code execution at any time.

# You can inject *any* code here.

# For example, if you type `print page` during pause,

# it will output content of "page" variable.

return render_template('index.html')

答案 2 :(得分:1)

我发现在PyCharm 2018.1.2中运行配置中有FLASK_DEBUG checbox:2003b6645c5cd79d3765fcb87ebd0475.png

在进行一些更改之后,保​​存文件会触发重新加载操作。

答案 3 :(得分:0)

在我的设置中,我正在通过运行main.py文件来调试flask应用程序,该文件设置了一些配置并调用app.run()。我的python解释器是在Docker容器中设置的。

我的问题是我需要检查Run with Python console。

59c3af8989fc6b2f83c90186bf86207a.png

答案 4 :(得分:0)

尝试在“编辑配置”中配置此python运行配置。之后,以调试模式运行。

a220152d92135abb4078b995d0d64d48.png

答案 5 :(得分:-1)

来自pycharm 2017的

使用python 2.7(在我的情况下使用虚拟环境,但我认为没有必要)我这样做:

运行...

将脚本和脚本参数留空

我输入了解释器选项:-m flask run

设置env变量FLASK_APP

比运行附加到本地进程,最后选择正在运行的进程

我的用例是从邮递员连接到烧瓶休息服务端点并在我的断点上中断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值