Отладка приложений
В зависимости от 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 – WSGI-приложение для запуска в режиме отладки.
- evalex – включить возможность оценки исключений (интерактивная отладка). Требуется сервер без форкинга.
- request_key – Ключ, указывающий на объект запроса в среде. Этот параметр игнорируется в текущих версиях.
- console_path – URL для консоли общего назначения.
- console_init_func – функция, выполняемая перед запуском консоли общего назначения. Значение возврата используется в качестве начального пространства имён.
-
show_hidden_frames – по умолчанию скрытые фреймы трассировки стека пропускаются. Можно отобразить их, установив этот параметр в
True. - pin_security – может использоваться для отключения системы безопасности на основе PIN-кода.
- pin_logging – включает ведение журнала системы PIN-кода.
Использование отладчика
После включения и возникновения ошибки во время запроса, вы увидите подробную трассировку стека вместо общего сообщения «внутренняя ошибка сервера». Трассировка стека также выводится на терминал.
Сообщение об ошибке отображается вверху. Щёлкните по нему, чтобы перейти к концу трассировки стека. Фреймы, представляющие пользовательский код, в отличие от встроенных функций или установленных пакетов, выделены синим цветом. Щёлкните по фрейму, чтобы увидеть больше строк контекста; ещё раз щелкнув, можно скрыть их.
Если у вас включена функция 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 (most recent call last)», вид изменится на традиционную трассировку стека в текстовом формате. Текст можно скопировать или автоматически вставить в gist.github.com одним щелчком.
© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/1.0.x/debug/