Рубрики
Без рубрики

Руководство о том, как отлаживать приложения Python с PDB

Отладка не новая хитрость – большинство разработчиков активно используют его в своей работе. Конечно, у каждого есть … с меткой Python, PDB, отладки.

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

Отладка Python с командой печати Как уже упоминалось выше, некоторые из нас используют «печать» для отображения информации, которая показывает, что происходит внутри кода. Некоторые из нас используют регистратор для одной и той же цели – но, пожалуйста, не путайте это с помощью регистратора для производственного кода, так как я имею в виду разработчиков, которые добавляют только регистратор во время периода поиска проблемы, то есть только до разработки процесса заканчивается.

Но правда в том, что печатается много лазейки. Возможно, его самым большим недостатком является то, что вы должны добавить изменения в свой код, затем повторно запустите приложение, чтобы увидеть другую переменную, которую вы пишете, или текущий тип переменной, например. Так как лучше лучше?

Команды отладчика Python По сути, отладчик – это инструмент, который дает вам способ, скажем, открыть приложение в определенном месте, чтобы вы могли посмотреть на ваши переменные, стек вызовов, или что вам нужно увидеть, установить условные точки останова, шаг через линию исходного кода по линии и т. Д. Это похоже на открытие капота вашего автомобиля, чтобы увидеть, откуда исходит дым, поиск в том, чтобы определить проблему.

Если вы работаете с Python, не только сможете просмотреть код во время отладки, но вы также можете запустить код, который записан в командной строке, либо даже влияет на процесс, изменяя значение переменных.

У Python есть встроенный отладчик, называемый PDB. Это простая утилита с интерфейсом командной строки, которая делает главную работу. Он имеет все функции отладчика, которые вам понадобятся, но если вы немного смотрите на него, вы можете продлить его, используя IPDB, который обеспечит отладчик с функциями из iPython.

Самый простой способ использовать PDB – это позвонить в код, над которым вы работаете.

импортировать PDB; PDB.Set_trace () Как только переводчик достигнет этой строки, вы получите командную строку на терминале, в котором вы выполняете программу. Это главный Python подсказка, но с некоторыми новыми командами.

Список (л)

Команда «List (L) покажет вам строку кода. Интерпретатор Python в настоящее время включен. Если вы хотите проверить другую область кода, эта команда имеет аргументы для первых и последних строк для отображения. Если вы предоставляете только номер первой строки, вы получите код вокруг линии, которую вы предоставили.

вверх (p) и вниз (d)

Up (p) и down (d) – это две команды, необходимые для навигации по стеке вызовов. С помощью этих команд вы можете увидеть, кто вызывает текущую функцию, например, или почему интерпретатор идет таким образом.

Шаг (ы) и следующий (n)

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

Перерыв (б)

Команда Break (B) позволяет настроить новые точки останова без изменения кода. Это требует немного больше объяснения, поэтому я буду в деталях ниже.

Вот краткий обзор других команд PDB:

Python Debugger заранее Ранее изменения кода были необходимы для чего-либо или установить точку останова. Однако довольно часто вам нужно установить точку останова внутри стороннего пакета. Конечно, вы можете открыть исходный код библиотеки в любое время из вашей виртуальной среды и добавить вызов для PDB.

Но теперь вы можете запустить приложение из отладчика и установить точки останова без каких-либо изменений в исходном коде. Чтобы выполнить приложение с отладчиком, используйте команду Python -M PDB.

Позвольте мне показать вам пример. У меня есть это простое приложение, которое отслеживает мое рабочее время. Внутри этого я использую библиотеку запросов, чтобы сделать HTTP-запросы, и я хочу пробиться в запросе пост. Как мне это сделать? Я запускаю свое приложение с отладчиком и установите точку останова внутри библиотеки запросов.

$ python -m pdb run.py
> /Users/.........................../run.py(1)()
-> from TimeLog.app import run_app
(Pdb) b requests/sessions.py:555
Breakpoint 1 at /..................../lib/python3.6/site-packages/requests/sessions.py:555  
(Pdb) c

Как вы можете видеть, вам не нужно вводить полный путь к исходному файлу. Вы просто положите относительный путь из любой папки в SYSP PATH, так же, как вы сделаете импорт в свой код.

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

Но что, если приложение много звонков, и вам нужен один конкретный звонок? Легкий. Вы можете указать состояние точки останова, и отладчик сломает приложение только в том случае, если это условие будет считаться верным.

В этом примере приложение сломается только в том случае, если json имеет ключ time_entry.

python -m pdb run.py  
> /Users/...../run.py(1)()
-> from TimeLog.app import run_app
(Pdb) b requests/sessions.py:555, json is not None and 'time_entry' in json
Breakpoint 1 at /Users/....../lib/python3.6/site-packages/requests/sessions.py:555  
(Pdb) c

DEBUG HELPER для Django, если вы используете веб-каркас Django, вы, вероятно, знаете, что если Debug установлен в True в ваших настройках, то в любом исключении вы увидите специальную страницу с информацией, такой как тип исключения, и сообщение, Traceback, локальные переменные и др.

Если вы хотите улучшить свою страницу отладки, подобную этому, установите Django-Extensions и используйте команду runserver_plus, чтобы запустить свой сервер Django для разработки. И в случае необходимости настроить PIN-код отладчика, вот пример того, как вы это делаете:

WERKZEUG_DEBUG_PIN=1234 ./manage.py runserver_plus

Если вы используете Django-reatensions вместо этой страницы по умолчанию, вы получите страницу Traceback, где вы можете увидеть код для каждой линии и открытый отладчик.

Процесс отладки осуществляется с помощью проекта Werkzeug, который является библиотекой WSGI для Python.

Как видите, есть много способов использовать отладчик. Это не слишком сложно, но в то же время он даст вам тонн преимуществ – не только вы получите репутацию в качестве разработчика кикассов, но вы также спасти себя много времени и энергии, и научитесь избегать разные ошибки в будущем. И, конечно же, как продукт, и ваш клиент выиграют, если вы используете правильный отладчик. Итак, это буквально выиграть для всех.

Автор: Vadym Zakovinko Backend Engineer/Solution Architect

Эта статья о Отладка приложений Python Первоначально опубликовано в блоге звезд Django. Вы также можете посетить нашу содержание платформы Племя продукта Создано профессионалами для тех, кто участвует в разработке продукта и процессах роста.

Оригинал: “https://dev.to/django_stars/debugging-python-applications-with-pdb-192j”