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