четверг, 9 июля 2026 г.

Pdb

 

Я

Алиса

Для отладки Python-кода есть несколько бесплатных инструментов — как локальные, так и онлайн-варианты. Выбор зависит от того, где и как вы работаете.

Локальные инструменты

pdb (Python Debugger) — это встроенный модуль стандартной библиотеки Python. Он позволяет пошагово выполнять код, просматривать стек вызовов и значения переменных. Чтобы использовать pdb, просто добавьте в код строку import pdb; pdb.set_trace() — интерпретатор остановится на этой строке, и вы сможете анализировать состояние программы. 

ipdb — улучшенная версия pdb с поддержкой IPython. Она добавляет автозаполнение TAB, подсветку синтаксиса и другие удобства интерактивной оболочки. Установить ipdb можно через pip install ipdb. 

pudb — библиотека для отладки, которая работает в терминале. Она предоставляет дополнительные возможности: поиск по коду (клавиша s), просмотр загруженных модулей (клавиша m) и их перезагрузку. 

PyCharm Community Edition — полноценная IDE от JetBrains со встроенным отладчиком. Она бесплатна для личного и образовательного использования, поддерживает брейкпоинты, инспекцию переменных и профилирование. Однако для отладки кода, запущенного на другой (удаленной) машине, требуется платная версия Professional. 

Visual Studio Code с расширением Python — бесплатный редактор кода с мощным отладчиком. Установите расширение через Marketplace и запустите код в терминале (python -m venv venv && source venv/bin/activate && pip install ipdb), затем запустите файл (code filename.py) или отладьте существующий процесс (python -m vscode.debug filename.py). 

Онлайн-инструменты

Эти сервисы позволяют отлаживать код прямо в браузере без установки дополнительного ПО. 

  • Python Tutor — визуализирует выполнение кода шаг за шагом. Отлично подходит для обучения и понимания логики программы. 
  • OnlineGDB — специализируется именно на отладке. Позволяет пошагово выполнять код, смотреть значения переменных и устанавливать брейкпоинты. 
  • Repl.it — полноценная браузерная IDE. Подходит для небольших проектов, но в бесплатном тарифе есть лимиты на ресурсы. 

Какой инструмент выбрать?

  • Для локальной разработки с базовым пониманием отладки — pdb.
  • Для интерактивной работы в терминале с дополнительными удобствами — ipdb.
  • Для визуализации и обучения — Python Tutor.
  • Для удаленной отладки или работы в браузере без установки — OnlineGDB или Repl.it.
  • Для профессиональной среды с расширенными возможностями — PyCharm Community Edition.

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

  • Я

    Алиса

    Основные команды pdb

    Учитывая твой интерес к низкоуровневой отладке (ты работал с WinDbg, x64dbg, C-кодом), pdb покажется проще: это «пошаговый» отладчик в консоли, без сложных окон, но с базовыми возможностями вроде просмотра стека и значений переменных.

    КомандаПолное имяЧто делает
    nnextВыполнить текущую строку, не заходя внутрь функций (перейти к следующей строке в текущей функции)
    sstepВыполнить строку и, если это вызов функции, зайти внутрь неё
    ccontinueПродолжать выполнение до следующего брейкпоинта или конца программы
    llistПоказать фрагмент исходного кода вокруг текущей строки (обычно 11 строк)
    p exprprint exprВывести значение выражения (переменной, формулы и т.п.)
    pp exprpretty-print exprТо же, что p, но красиво отформатировать (удобно для списков, словарей)
    b [место]break [место]Установить точку останова: b 42 (строка 42), b my_func (функция)
    cl [номер]clear [номер]Удалить брейкпоинт по его номеру (список брейкпоинтов — b без аргументов)
    wwhereПоказать стек вызовов (где мы сейчас находимся по цепочке функций)
    aargsПоказать аргументы текущей функции
    qquitЗавершить отладку и остановить программу
    hhelpПоказать список команд или справку по конкретной команде (h n)

    Пример использования

    Допустим, у нас есть файл calc.py:

    python
    def add(a, b):
        return a + b
    
    def multiply_and_add(x, y, z):
        prod = x * y
        total = add(prod, z)
        return total
    
    if __name__ == "__main__":
        a = 3
        b = 4
        c = 5
        result = multiply_and_add(a, b, c)
        print("Result:", result)
    

    Способ 1: вставить точку остановки в коде

    Добавим import pdb; pdb.set_trace() туда, где хотим начать отладку:

    python
    def multiply_and_add(x, y, z):
        prod = x * y
        import pdb; pdb.set_trace()   # <--- остановка здесь
        total = add(prod, z)
        return total
    

    Запускаем: python calc.py. Когда выполнение дойдёт до set_trace(), появится приглашение (Pdb).

    Типичный сценарий отладки:

    1. (Pdb) l — смотрим, где мы в коде.
    2. (Pdb) p x, y, z — проверяем аргументы.
    3. (Pdb) s — заходим внутрь add, если нужно посмотреть детали.
    4. (Pdb) n — просто идём дальше, не заходя в add.
    5. (Pdb) w — смотрим стек вызовов, чтобы понять, кто нас вызвал.
    6. (Pdb) c — продолжаем до следующего брейкпоинта (или конца).
    7. (Pdb) q — если хотим аварийно завершить сессию.

    Способ 2: запустить скрипт сразу под pdb (без правки кода)

    В терминале:

    bash
    python -m pdb calc.py
    

    Отладчик остановится на первой исполняемой строке. Дальше можно:

    • (Pdb) b multiply_and_add — поставить брейкпоинт на функцию.
    • (Pdb) c — продолжить до этого брейкпоинта.
    • Дальше как в примере выше.

    Практический пример с ошибкой

    Пусть в коде ошибка:

    python
    def divide(a, b):
        return a / b
    
    if __name__ == "__main__":
        import pdb; pdb.set_trace()
        x = 10
        y = 0
        print(divide(x, y))
    

    Сценарий в отладчике:

    1. (Pdb) p x, y — видим, что y == 0.
    2. (Pdb) s или n — при выполнении divide получим исключение, но до него можно успеть проверить аргументы и понять причину.
    3. Если хотим остановиться именно в divide, можно сделать b divide, затем c.

    Нюансы, полезные для твоего профиля (C/низкоуровневый взгляд)

    • pdb — это интерпретатор-уровень: он не показывает машинные инструкции, регистры или память, как x64dbg/WinDbg. Это отладка логики на уровне Python-строк и переменных.
    • Для просмотра «состояния» вместо print используют p и pp, что ближе к «inspect variables» в классических отладчиках.
    • Стек вызовов (w) — аналог backtrace.
    • Брейкпоинты (b) можно ставить по имени функции, что удобно при работе с большими файлами.

    Если скажешь, какую задачу хочешь отладить (например, шахматный движок на Python, парсер, игру «Дурак» и т.д.), могу показать конкретный сценарий с pdb именно под этот случай.

    Комментариев нет:

    Отправить комментарий