Отладка с помощью pdb
Используйте встроенный отладчик Python для интерактивного пошагового выполнения кода.
«Отладка с помощью pdb» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Что такое pdb
pdb — встроенный интерактивный отладчик Python. Он позволяет приостанавливать выполнение, проверять переменные и пошагово проходить код строка за строкой.
import pdb
def faulty(n):
result = n * 2
pdb.set_trace() # execution pauses here
return result + 1
faulty(5)breakpoint() — Python 3.7+
breakpoint() — встроенное сокращение для import pdb; pdb.set_trace(). Оно учитывает переменную окружения PYTHONBREAKPOINT.
def process(data):
for item in data:
if item < 0:
breakpoint() # drop into pdb here
print(item)
process([1, -2, 3])Основные команды pdb
Основные команды: n (следующая строка), s (вход с переходом внутрь), c (продолжить), q (выйти), p expr (вывести), l (показать исходный код).
# Inside pdb prompt:
# (Pdb) n — execute next line
# (Pdb) s — step into function
# (Pdb) c — continue to next breakpoint
# (Pdb) p my_var — print value
# (Pdb) l — show source around current line
# (Pdb) q — quitПроверка переменных
Используйте p, чтобы вывести выражение, pp — для красиво оформленного вывода, а locals() — чтобы увидеть все локальные переменные.
# (Pdb) p data
# [1, -2, 3]
# (Pdb) pp {"key": "value", "num": 42}
# {'key': 'value',
# 'num': 42}
# (Pdb) p locals()Условные точки останова
Устанавливайте условные точки останова, чтобы приостанавливать выполнение только при истинности условия и не выполнять повторяющиеся пошаговые действия.
import pdb
def process(items):
for i, item in enumerate(items):
if item < 0: # manual condition
pdb.set_trace()
result = item * 2
# Or inside pdb: b filename.py:12, x < 0Посмертная отладка
Проверьте состояние сразу после необработанного исключения с помощью pdb.post_mortem() или запустите свой скрипт с помощью python -m pdb script.py.
import pdb
try:
1 / 0
except ZeroDivisionError:
pdb.post_mortem() # inspect at the crash point
# Or from CLI:
# python -m pdb my_script.pyПросмотр переменных с помощью w и where
w (where) выводит текущую трассировку стека вызовов, чтобы Вы понимали, как выполнение достигло текущего кадра.
# (Pdb) w
# /app/main.py(10)main()
# -> process([1,-2,3])
# /app/main.py(5)process()
# -> breakpoint()Перемещение между кадрами
u (up) и d (down) перемещают между кадрами стека вызовов, чтобы Вы могли просматривать переменные в вызывающих функциях.
# (Pdb) u — move to calling frame
# (Pdb) d — move back down
# (Pdb) p data — inspect variable in that frameipdb — расширенный отладчик
ipdb дополняет pdb возможностями IPython: автодополнением по клавише Tab, подсветкой синтаксиса и магическими командами.
# pip install ipdb
import ipdb
def calc(x):
ipdb.set_trace()
return x ** 2
calc(7)pudb — визуальный отладчик терминала
pudb предоставляет полноэкранный отладчик TUI в терминале с панелями кода, переменных и стека.
# pip install pudb
# python -m pudb my_script.py
import pudb
def run():
pudb.set_trace()
data = [1, 2, 3]
return sum(data)Отключение точек останова в CI
Установите PYTHONBREAKPOINT=0, чтобы все вызовы breakpoint() не выполняли никаких действий в среде непрерывной интеграции или рабочей среде.
# In CI pipeline:
# export PYTHONBREAKPOINT=0
# python my_script.py
# breakpoint() is silently skippedБыстрая проверка
Какая команда pdb продолжает выполнение до следующей точки останова?
Итоги
Используйте breakpoint(), чтобы приостановить выполнение и перейти в pdb. Основные команды: n, s, c, p, q. Для более широких возможностей попробуйте ipdb или pudb. В среде непрерывной интеграции отключайте отладку с помощью PYTHONBREAKPOINT=0.
Часто задаваемые вопросы
Урок «Отладка с помощью pdb» бесплатный?
Да — полный текст урока «Отладка с помощью pdb» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Отладка с помощью pdb»?
Используйте встроенный отладчик Python для интерактивного пошагового выполнения кода. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Отладка с помощью pdb»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Основы модуля logging
- Обработчики, форматтеры и фильтры
- Структурированное журналирование
- Отладка с помощью pdb