Spec-Zone.ru › Werkzeug 2.1

Отладка приложений

В зависимости от 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 в:

a screenshot of the interactive debugger

Внутри интерактивных консолей можно выполнять любой код 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API