Отладка приложений
В зависимости от шлюза/сервера 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 (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.
- Тип возвращаемого значения
Использование отладчика
После включения и возникновения ошибки во время запроса вы увидите подробную трассировку стека вместо стандартного сообщения «внутренняя ошибка сервера». Трассировка стека также выводится в терминал.
Сообщение об ошибке отображается в верхней части. Щелчок по нему переместит вас к низу трассировки стека. Фреймы, представляющие пользовательский код, в отличие от встроенных функций или установленных пакетов, выделены синим цветом. Щелчок по фрейму покажет дополнительные строки контекста; повторный щелчок скроет их.
Если у вас включена функция evalex, вы можете получить консоль для каждого фрейма в трассировке стека, наводя курсор на фрейм и нажимая значок консоли, который появляется справа. После нажатия откроется консоль, где вы сможете выполнить код Python в:
В интерактивных консолях вы можете выполнить любой код Python. В отличие от обычных консолей Python, вывод представлений объектов окрашен и по умолчанию сокращен до разумного размера. Если вывод длиннее, чем консоль решает отобразить, к представлению добавляется небольшой знак «плюс», и щелчок по нему позволит расширить представление.
Чтобы отобразить все переменные, определенные в текущем фрейме, вы можете использовать функцию dump(). Вы можете вызвать её без аргументов, чтобы получить подробный список всех переменных и их значений, или с объектом в качестве аргумента, чтобы получить подробный список всех его атрибутов.
PIN отладчика
Начиная с Werkzeug 0.11, консоль отладки защищена PIN-кодом. Это вспомогательная функция безопасности, чтобы уменьшить вероятность взлома отладчика в случае, если вы забудете отключить его при развертывании в производственной среде. Авторизация по PIN-коду включена по умолчанию.
При первом открытии консоли появится диалоговое окно, запрашивающее PIN-код, который выводится в командной строке. PIN-код генерируется стабильным образом, специфичным для проекта. Явный PIN-код можно указать через переменную среды WERKZEUG_DEBUG_PIN. Это можно установить на число, и оно станет PIN-кодом. Эта переменная также может быть установлена в значение off для полного отключения проверки PIN-кода.
Если неверный PIN-код вводится слишком много раз, необходимо перезапустить сервер.
Эта функция не предназначена для полной защиты отладчика. Она предназначена для затруднения взлома отладчика злоумышленником. Никогда не включайте отладчик в производственной среде.
Вставка ошибок
Если вы нажмете на заголовок «Traceback (последний вызов)», представление переключится на традиционную текстовую трассировку стека. Вы можете скопировать и вставить её, чтобы предоставить информацию при задавании вопроса или сообщении об ошибке.
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/2.0.x/debug/