Spec-Zone.ru › Werkzeug 3.0

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

В зависимости от 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 (t.Callable[[], dict[str, t.Any]] | None) – функция, которая выполняется перед запуском консоли общего назначения. Возвращаемое значение используется в качестве начального пространства имен.
  • show_hidden_frames (bool) – по умолчанию скрытые строки трассировки стека пропускаются. Вы можете отобразить их, установив этот параметр в True.
  • pin_security (bool) – может использоваться для отключения системы безопасности на основе PIN.
  • pin_logging (bool) – включает ведение журнала системы PIN.
Изменения

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

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

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

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

Если у вас включена функция evalex, вы можете получить консоль для каждой строки в трассировке стека, наведя курсор на строку и нажав значок консоли, который появляется справа. После нажатия откроется консоль, где вы сможете выполнять код Python в:

скриншот интерактивного отладчика

Внутри интерактивных консолей можно выполнить любой код Python. В отличие от обычных консолей Python, вывод repr-представлений объектов по умолчанию окрашен и сокращен до разумного размера. Если вывод длиннее, чем отображает консоль, к repr добавляется маленький плюс, и щелчок позволит развить repr.

Чтобы отобразить все переменные, определённые в текущей строке, можно использовать функцию dump(). Вы можете вызвать её без аргументов, чтобы получить подробный список всех переменных и их значений, или с объектом в качестве аргумента, чтобы получить подробный список всех его атрибутов.

PIN отладчика

Начиная с Werkzeug 0.11, консоль отладки защищена PIN-кодом. Это дополнительная мера безопасности, уменьшающая вероятность злоупотребления отладчиком, если вы забываете отключить его при развертывании в рабочей среде. Включена система аутентификации по PIN-коду по умолчанию.

При первом открытии консоли появится диалоговое окно, запрашивающее PIN-код, который также выводится в командную строку. PIN-код генерируется стабильным способом, специфичным для проекта. Явный PIN-код можно указать через переменную окружения WERKZEUG_DEBUG_PIN. Она может содержать число, которое станет PIN-кодом. Эта переменная также может быть установлена в значение off, чтобы полностью отключить проверку PIN.

Если неправильный PIN введён слишком много раз, необходимо перезапустить сервер.

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

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

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

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

Spec-Zone.ru

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