Отладка ошибок приложения
В рабочей среде
Не запускайте сервер разработки или встроенный отладчик в рабочей среде. Отладчик позволяет выполнять произвольный код 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 )
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/stable/debugging/