Spec-Zone.ru › Werkzeug 0.15

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

В зависимости от шлюза/сервера 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, lodgeit_url=None, pin_security=True, pin_logging=True)

Включает поддержку отладки для данного приложения:

from werkzeug.debug import DebuggedApplication
from myapp import app
app = DebuggedApplication(app, evalex=True)

Ключевое слово аргумент evalex позволяет вычислять выражения в контексте кадра трассировки.

Добавлена в версии 0.9: Параметр lodgeit_url был устарел.

Параметры:
  • app – приложение WSGI, которое будет запущено в режиме отладки.
  • evalex – включить функцию оценки исключений (интерактивная отладка). Это требует не разветвляющегося сервера.
  • request_key – ключ, указывающий на объект запроса в среде. Этот параметр игнорируется в текущих версиях.
  • console_path – URL для консоли общего назначения.
  • console_init_func – функция, которая выполняется перед запуском консоли общего назначения. Возвращаемое значение используется в качестве начального пространства имён.
  • show_hidden_frames – по умолчанию скрытые кадры трассировки пропускаются. Вы можете показать их, установив этот параметр в True.
  • pin_security – может использоваться для отключения системы безопасности на основе пин-кода.
  • pin_logging – включает ведение журнала системы пин-кода.

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

После включения, при возникновении ошибки во время запроса, вместо сообщения "внутренняя ошибка сервера" будет показана подробная трассировка.

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

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

a screenshot of the interactive debugger

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

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

Пин-код отладчика

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

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

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

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

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

Если вы нажмёте на заголовок "Traceback (most recent call last)", представление переключится на традиционную текстовую трассировку. Текст можно скопировать или автоматически вставить в gist.github.com одним щелчком.

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

Spec-Zone.ru

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