Отладка приложений
В зависимости от WSGI шлюза/сервера, исключения обрабатываются по-разному. Большинство времени исключения отправляются в stderr или в лог ошибок, и отображается общее сообщение «Ошибка сервера 500».
Поскольку это не лучшая среда для отладки, Werkzeug предоставляет WSGI-прослойку, которая отображает понятные трассировки стека, в том числе с интерактивной консолью отладки для выполнения кода в любом кадре.
Внимание
Отладчик позволяет выполнять произвольный код, что создаёт серьезную угрозу безопасности. Отладчик никогда не должен использоваться на производственных машинах. Мы не можем достаточно подчеркнуть это. Не включайте отладчик в производственной среде.
Примечание
Интерактивный отладчик не работает в средах с виртуализацией, таких как сервер, запускающий несколько процессов. Большинство таких сред являются производственными серверами, где отладчик вообще не должен быть включён.
Включение отладчика
Включите отладчик, обернув приложение прослойкой DebuggedApplication. В качестве альтернативы, вы можете передать use_debugger=True в run_simple() и он сделает это за вас.
-
class werkzeug.debug.DebuggedApplication(app, evalex=False, request_key='werkzeug.request', console_path='/console', console_init_func=None, show_hidden_frames=False, pin_security=True, pin_logging=True) -
Включает поддержку отладки для данного приложения:
from werkzeug.debug import DebuggedApplication from myapp import app app = DebuggedApplication(app, evalex=True)
Ключевое слово
evalexпозволяет оценивать выражения в контексте кадра трассировки стека.- Параметры
-
- app (WSGIApplication) – WSGI-приложение для запуска в режиме отладки.
- evalex (bool) – включить функциональность оценки исключений (интерактивная отладка). Требуется сервер без виртуализации.
- request_key (str) – Ключ, указывающий на объект запроса в данной среде. Этот параметр игнорируется в текущих версиях.
- console_path (str) – URL для консоли общего назначения.
- console_init_func (Optional[Callable[[], Dict[str, Any]]]) – функция, которая выполняется перед запуском консоли общего назначения. Возвращаемое значение используется в качестве начального пространства имён.
-
show_hidden_frames (bool) – по умолчанию скрытые кадры трассировки пропускаются. Вы можете отобразить их, установив этот параметр в
True. - pin_security (bool) – может использоваться для отключения системы безопасности на основе пина.
- pin_logging (bool) – включает ведение журнала системы пина.
- Тип возвращаемого значения
-
None
Использование отладчика
После включения и возникновения ошибки во время запроса вы увидите подробную трассировку стека вместо общего сообщения «внутренняя ошибка сервера». Трассировка стека всё ещё выводится в терминал.
Сообщение об ошибке отображается в верхней части. Щёлкнув по нему, перейдёте к концу трассировки стека. Кадры, представляющие пользовательский код, в отличие от встроенных функций или установленных пакетов, выделены синим цветом. Щёлкните по кадру, чтобы увидеть больше строк контекста; повторный щелчок скроет их.
Если у вас включена функция evalex, вы можете получить консоль для каждого кадра в трассировке стека, наводя курсор на кадр и нажав значок консоли, который появится справа. После нажатия откроется консоль, где вы можете выполнять код Python в:
Внутри интерактивных консолей можно выполнять любой код Python. В отличие от обычных консолей Python, вывод объекта repr отображается цветным и уменьшен до разумного размера по умолчанию. Если вывод длиннее, чем решает отобразить консоль, к repr добавляется небольшой знак «плюс», и щелчок позволит расширить repr.
Чтобы отобразить все переменные, определённые в текущем кадре, можно использовать функцию dump(). Вы можете вызвать её без аргументов, чтобы получить подробный список всех переменных и их значений, или с объектом в качестве аргумента, чтобы получить подробный список всех его атрибутов.
PIN отладчика
Начиная с Werkzeug 0.11, консоль отладки защищена PIN-кодом. Это мера безопасности, чтобы уменьшить вероятность эксплуатации отладчика, если вы забыли отключить его при развертывании на производстве. Авторизация по PIN-коду включена по умолчанию.
При первом открытии консоли появится диалоговое окно, запрашивающее PIN-код, который будет напечатан в командной строке. PIN-код генерируется стабильным способом, специфичным для проекта. Явный PIN-код может быть предоставлен через переменную окружения WERKZEUG_DEBUG_PIN. Она может быть установлена на число, которое и станет PIN-кодом. Эта переменная также может быть установлена на значение off для полного отключения проверки PIN-кода.
Если неверный PIN-код введён слишком много раз, необходимо перезапустить сервер.
Эта функция не предназначена для полной защиты отладчика. Она призвана усложнить атакующему эксплуатацию отладчика. Никогда не включайте отладчик в производственной среде.
Вставка ошибок
Если вы щелкните заголовок «Трассировка стека (последний вызов в первую очередь)», представление переключится на традиционную текстовую трассировку стека. Вы можете скопировать и вставить её, чтобы предоставить информацию при задавании вопросов или сообщении об ошибках.
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.1.x/debug/