Отладка кода: print, breakpoints, режим Debug

Зачем нужна отладка? 🐞

Представь ситуацию: код написан, но программа ведёт себя странно — выдаёт ошибку, зависает или просто не делает то, что должна. Вот тут и пригодится отладка! Это процесс поиска и устранения ошибок (багов) в коде.

Python предлагает несколько мощных инструментов для отладки:

  • Старый добрый print()
  • Точки останова (breakpoints)
  • Режим Debug в IDE

Разберём каждый из них на практических примерах!


Метод "грубой силы": print() 🖨️

Самый простой и быстрый способ понять, что происходит в коде — добавить print() в подозрительные места.

def calculate_discount(price, discount):
    print(f"Начальные значения: price={price}, discount={discount}")  # Отладочный вывод
    final_price = price - (price * discount)
    print(f"Результат расчёта: {final_price}")  # Проверяем результат
    return final_price

# Вызываем функцию с тестовыми данными
result = calculate_discount(1000, 0.3)
print(f"Итоговый результат: {result}")

Когда использовать:

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

Плюсы:
✅ Простота использования
✅ Работает везде
✅ Не требует специальных инструментов

Минусы:
❌ Загрязняет код
❌ Нужно удалять/комментировать после отладки
❌ Неудобно для сложных проектов


Профессиональный подход: точки останова ⏸️

Точки останова (breakpoints) — это специальные метки, которые останавливают выполнение программы в определённой строке кода. После остановки можно вручную проверить значения всех переменных.

Как использовать в PyCharm:

  1. Кликни слева от номера строки — появится красная точка
  2. Запусти программу в режиме Debug (зелёный жучок)
  3. Программа остановится на breakpoint'е
def complex_calculation(data):
    result = 0
    for item in data:  # Установи breakpoint здесь
        if item % 2 == 0:
            result += item * 2
        else:
            result += item
    return result

numbers = [1, 2, 3, 4, 5]
print(complex_calculation(numbers))

Что можно делать в точке останова: - Проверять значения всех переменных - Выполнять код пошагово (Step Over, Step Into) - Менять значения переменных "на лету" - Продолжать выполнение до следующей точки

Преимущества:

✅ Не нужно изменять код
✅ Полный контроль над выполнением
✅ Можно исследовать сложные структуры данных


Полный контроль: режим Debug 🚦

Режим Debug — это продвинутый инструмент, который сочетает точки останова с возможностью пошагового выполнения кода.

Основные кнопки управления:

  1. ▶️ Continue — продолжить выполнение до следующей точки
  2. ⏩ Step Over — выполнить текущую строку, не заходя в функции
  3. ⏬ Step Into — зайти внутрь вызываемой функции
  4. ⏫ Step Out — выйти из текущей функции

Пример отладки рекурсивной функции:

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)  # Установи breakpoint здесь

print(factorial(5))

Что можно исследовать в режиме Debug:

  • Стек вызовов функций (Call Stack)
  • Локальные и глобальные переменные
  • Поток выполнения программы
  • Изменения переменных между шагами

Советы от Данилы Бежина 🎓

  1. Комбинируй методы: начинай с print() для простых проверок, переходи к точкам останова для сложных случаев.
  2. Используй условные точки останова: в PyCharm можно установить breakpoint, который срабатывает только при определённом условии.
  3. Смотри Call Stack: при отладке сложных вызовов всегда проверяй стек вызовов — он показывает цепочку функций.
  4. Экспериментируй с переменными: в режиме Debug можно менять значения переменных прямо во время выполнения.

Хочешь глубже разобраться в отладке? Посмотри уроки Данилы Бежина по работе с PyCharm!


Практическое задание 🔥

  1. Напиши функцию, которая принимает список чисел и возвращает сумму квадратов чётных чисел
  2. Добавь в неё несколько print() для отладки
  3. Проверь работу функции в режиме Debug с разными входными данными
  4. Установи точку останова внутри цикла и проанализируй значения на каждой итерации
def sum_of_squares(numbers):
    total = 0
    for num in numbers:
        if num % 2 == 0:
            total += num ** 2
    return total

# Тестовые данные
print(sum_of_squares([1, 2, 3, 4, 5]))  # Должно быть 20 (4 + 16)

Подсказка: попробуй изменить значения списка прямо в режиме Debug и посмотри, как меняется результат!

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube