Spec-Zone.ru › Werkzeug 2.2

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

В зависимости от шлюза/сервера 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 позволяет вычислять выражения в любом кадре трассировки стека. Это работает путем сохранения каждого кадра с его локальным состоянием. Некоторые состояния, такие как Локальные переменные контекста, по умолчанию не могут быть восстановлены с помощью кадра. Когда evalex включен, environ["werkzeug.debug.preserve_context"] будет вызываемым объектом, который принимает контекстный менеджер и может быть вызван несколько раз. Каждый контекстный менеджер будет входить перед вычислением кода в кадре, затем будет выходить снова, так что они могут выполнять настройку и завершение для каждого вызова.

Параметры:
  • 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.
  • pin_logging (bool) – включает ведение журнала системы PIN.

Изменено в версии 2.2: Добавлен ключ среды werkzeug.debug.preserve_context.

Использование отладчика

После включения и возникновения ошибки во время запроса, вместо стандартного сообщения «внутренняя ошибка сервера» вы увидите подробную трассировку стека. Трассировка стека также выводится в терминал.

Сообщение об ошибке отображается вверху. Щелчок по нему переходит к нижней части трассировки стека. Кадры, представляющие пользовательский код, в отличие от встроенных функций или установленных пакетов, выделены синим цветом. Щелчок по кадру отобразит дополнительные строки для контекста, повторный щелчок скроет их.

Если функция 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 вводится слишком много раз, необходимо перезапустить сервер.

Эта функция не предназначена для полной защиты отладчика. Она предназначена для затруднения взлома отладчика злоумышленником. Никогда не включайте отладчик в рабочей среде.

Вставка ошибок

Если вы щелкните заголовок «Traceback (most recent call last)», отображение переключится на традиционную текстовую трассировку стека. Вы можете скопировать и вставить ее, чтобы предоставить информацию при задании вопроса или сообщении об ошибке.

© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.2.x/debug/

Spec-Zone.ru

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