除錯應用程式錯誤¶
在生產環境中¶
請勿在生產環境中執行開發伺服器,或啟用內建除錯器。 除錯器允許從瀏覽器執行任意 Python 程式碼。它受到 PIN 碼保護,但不應將其作為安全保障依賴。
使用錯誤記錄工具,例如 Sentry,如 錯誤記錄工具 中所述,或啟用記錄和通知,如 記錄 中所述。
如果您可以存取伺服器,您可以新增一些程式碼來啟動外部除錯器,如果 request.remote_addr
符合您的 IP。某些 IDE 除錯器也具有遠端模式,因此可以與伺服器上的中斷點進行本地互動。僅暫時啟用除錯器。
內建除錯器¶
內建的 Werkzeug 開發伺服器提供了一個除錯器,當請求期間發生未處理的錯誤時,它會在瀏覽器中顯示互動式追溯。此除錯器僅應在開發期間使用。

警告
除錯器允許從瀏覽器執行任意 Python 程式碼。它受到 PIN 碼保護,但仍然代表重大的安全風險。請勿在生產環境中執行開發伺服器或除錯器。
當開發伺服器在除錯模式下執行時,預設會啟用除錯器。
$ flask --app hello run --debug
從 Python 程式碼執行時,傳遞 debug=True
會啟用除錯模式,這在很大程度上是等效的。
app.run(debug=True)
開發伺服器 和 命令列介面 有關執行除錯器和除錯模式的更多資訊。有關除錯器的更多資訊可以在 Werkzeug 文件 中找到。
外部除錯器¶
外部除錯器,例如 IDE 提供的那些,可以提供比內建除錯器更強大的除錯體驗。它們也可以在引發錯誤之前,或在未引發錯誤的情況下,用於逐步執行請求期間的程式碼。有些甚至具有遠端模式,因此您可以除錯在另一台機器上執行的程式碼。
當使用外部除錯器時,應用程式仍應處於除錯模式,否則 Flask 會將未處理的錯誤轉換為通用的 500 錯誤頁面。但是,應停用內建除錯器和重新載入器,以免它們干擾外部除錯器。
$ flask --app hello run --debug --no-debugger --no-reload
從 Python 執行時
app.run(debug=True, use_debugger=False, use_reloader=False)
停用這些不是必需的,外部除錯器將繼續工作,但有以下注意事項。
如果未停用內建除錯器,它會在外部除錯器之前捕獲未處理的例外。
如果未停用重新載入器,則如果程式碼在中斷點期間發生更改,則可能會導致意外的重新載入。
如果停用內建除錯器,開發伺服器仍然會捕獲未處理的例外,否則它會在任何錯誤時崩潰。如果您想要那樣(通常您不想要),請將
passthrough_errors=True
傳遞給app.run
。app.run( debug=True, passthrough_errors=True, use_debugger=False, use_reloader=False )