调试应用程序错误 — Flask 文档

来自菜鸟教程
Flask/docs/2.0.x/debugging
跳转至:导航、​搜索

调试应用程序错误

简介

请勿在生产环境中运行开发服务器或启用内置调试器。 调试器允许从浏览器执行任意 Python 代码。 它由一个 pin 保护,但不应该依赖它来确保安全。

使用错误日志记录工具,例如 Sentry,如 错误日志记录工具 中所述,或启用日志记录和通知,如 日志记录 中所述。

如果您有权访问服务器,如果 request.remote_addr 与您的 IP 匹配,您可以添加一些代码来启动外部调试器。 一些 IDE 调试器还具有远程模式,因此可以在本地与服务器上的断点进行交互。 仅暂时启用调试器。


内置调试器

内置的 Werkzeug 开发服务器提供了一个调试器,当请求期间发生未处理的错误时,它会在浏览器中显示交互式回溯。 此调试器仅应在开发期间使用。

class=screenshot align-center|screenshot of debugger in action

警告

调试器允许从浏览器执行任意 Python 代码。 它受 PIN 保护,但仍存在重大安全风险。 不要在生产环境中运行开发服务器或调试器。


要启用调试器,请在将 FLASK_ENV 环境变量设置为 development 的情况下运行开发服务器。 这会将 Flask 置于调试模式,这会改变它处理某些错误的方式,并启用调试器和重新加载器。

FLASK_ENV 只能设置为环境变量。 从 Python 代码运行时,传递 debug=True 启用调试模式,这几乎是等效的。 调试模式也可以通过 FLASK_DEBUG 环境变量与 FLASK_ENV 分开控制。

app.run(debug=True)

Development ServerCommand Line Interface 提供了有关运行调试器、调试模式和开发模式的更多信息。 有关调试器的更多信息可以在 Werkzeug 文档 中找到。


外部调试器

外部调试器(例如 IDE 提供的调试器)可以提供比内置调试器更强大的调试体验。 它们还可用于在引发错误之前或未引发错误的情况下在请求期间单步执行代码。 有些甚至具有远程模式,因此您可以调试在另一台机器上运行的代码。

使用外部调试器时,应用程序应仍处于调试模式,但禁用可能会干扰的内置调试器和重新加载器会很有用。

从命令行运行时:

从 Python 运行时:

app.run(debug=True, use_debugger=False, use_reloader=False)

禁用这些不是必需的,外部调试器将继续使用以下警告。 如果未禁用内置调试器,它将在外部调试器之前捕获未处理的异常。 如果未禁用重载器,则在调试期间代码更改时可能会导致意外重载。