Отладка ошибок приложения¶
В производстве¶
Не запускайте сервер разработки и не включайте встроенный отладчик в производственной среде. Отладчик позволяет выполнять произвольный код Python из браузера. Он защищен булавкой, но на это не следует полагаться в плане безопасности.
Используйте средство регистрации ошибок, например Sentry, как описано в Инструменты регистрации ошибок, или включите регистрацию и уведомления, как описано в Ведение журнала.
Если у вас есть доступ к серверу, вы можете добавить некоторый код для запуска внешнего отладчика, если request.remote_addr
соответствует вашему IP. Некоторые отладчики IDE также имеют удаленный режим, поэтому с точками останова на сервере можно работать локально. Включайте отладчик только временно.
Встроенный отладчик¶
Встроенный сервер разработки Werkzeug предоставляет отладчик, который показывает интерактивную трассировку в браузере, когда во время запроса возникает необработанная ошибка. Этот отладчик следует использовать только во время разработки.
Предупреждение
Отладчик позволяет выполнять произвольный код Python из браузера. Он защищен булавкой, но все равно представляет собой серьезный риск для безопасности. Не запускайте сервер разработки или отладчик в производственной среде.
Отладчик включен по умолчанию, когда сервер разработки запущен в режиме отладки.
$ flask --app hello run --debug
При запуске из кода Python передача debug=True
включает режим отладки, что в основном эквивалентно.
app.run(debug=True)
Сервер разработки и Интерфейс командной строки содержат дополнительную информацию о запуске отладчика и режиме отладки. Более подробную информацию об отладчике можно найти в разделе Werkzeug documentation.
Внешние отладчики¶
Внешние отладчики, например, предоставляемые IDE, могут предложить более мощные возможности отладки, чем встроенный отладчик. Их также можно использовать для просмотра кода во время выполнения запроса до возникновения ошибки или если ошибка не возникла. Некоторые из них даже имеют удаленный режим, позволяющий отлаживать код, запущенный на другой машине.
При использовании внешнего отладчика приложение все равно должно находиться в режиме отладки, но может быть полезно отключить встроенный отладчик и перезагрузчик, которые могут мешать.
$ flask --app hello run --debug --no-debugger --no-reload
При запуске из Python:
app.run(debug=True, use_debugger=False, use_reloader=False)
Отключать их не обязательно, внешний отладчик будет продолжать работать со следующими оговорками. Если встроенный отладчик не отключен, он будет перехватывать необработанные исключения раньше, чем это сможет сделать внешний отладчик. Если не отключен перезагрузчик, он может вызвать неожиданную перезагрузку, если код изменится во время отладки.