Отладка ошибок приложения
В рабочей среде
Не запускайте сервер разработки или встроенный отладчик в рабочей среде. Отладчик позволяет выполнять произвольный Python-код из браузера. Он защищен пином, но на эту защиту нельзя полагаться в плане безопасности.
Используйте инструмент регистрации ошибок, такой как Sentry, как описано в Инструменты регистрации ошибок, или включите регистрирование и уведомления, как описано в Регистрация.
Если у вас есть доступ к серверу, вы можете добавить код для запуска внешнего отладчика, если request.remote_addr соответствует вашему IP-адресу. Некоторые отладчики IDE также имеют режим удаленного подключения, чтобы можно было взаимодействовать с точками останова на сервере локально. Включайте отладчик только временно.
Встроенный отладчик
Встроенный сервер разработки Werkzeug предоставляет отладчик, который отображает интерактивный трассировку стека в браузере, когда во время запроса возникает необработанная ошибка. Этот отладчик следует использовать только во время разработки.
Предупреждение
Отладчик позволяет выполнять произвольный Python-код из браузера. Он защищен пином, но всё равно представляет собой значительный риск для безопасности. Не запускайте сервер разработки или отладчик в рабочей среде.
Отладчик включён по умолчанию, когда сервер разработки запущен в режиме отладки.
$ 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 )
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.3.x/debugging/