0Pricing
Python Academy · Урок

Отладка с помощью 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 frame

ipdb — расширенный отладчик

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 — локальная установка не требуется.

Все уроки этого курса

  1. Основы модуля logging
  2. Обработчики, форматтеры и фильтры
  3. Структурированное журналирование
  4. Отладка с помощью pdb
← Назад к Python Academy