Breakpoints в VS Code и pdb: находим баги без сотни print.
⏱️ ~1 ч 30 мин·Начальный·📚 6 уроков
Бытовая аналогия: стоп-кадр
Программа выполняется слишком быстро, чтобы уследить глазами — как футбольный матч на перемотке. Когда судье нужно разобраться в спорном моменте, он смотрит стоп-кадр и замедленный повтор. Отладчик (debugger) — это стоп-кадр для кода: вы останавливаете программу на любой строкеТекстовое значение в кавычках: "привет". Неизменяема. По-английски string (str)., смотрите значения всех переменных и прокручиваете выполнение по одному шагу.
Чем отладчик лучше print
В уроке про функцииИменованный блок кода, который можно вызывать многократно. Может принимать аргументы и возвращать результат. мы отлаживали программу «печатью» — вставляли print() в подозрительные места. Это работает, но у отладчика есть преимущества:
видно все переменныеИменованное хранилище для значения. Имя связывается со значением через присваивание: x = 5. сразу, а не только те, что догадались напечатать;
не нужно менять код (и потом вычищать забытые print);
можно идти по программе шаг за шагом и заметить момент, где всё пошло не так;
внутри паузы можно выполнять свои выражения — «а чему равно len(items)?»
Breakpoint в VS Code
В VS Code (мы поставили его в прошлых уроках) отладка встроена:
Поставьте точку останова — кликните слева от номера строки, появится красная точка. Это команда «остановись, когда дойдёшь сюда».
Запустите с отладкой — клавиша F5 (или Run → Start Debugging, выберите «Python File»).
Программа остановится на точке: слева панель Variables со всеми переменными, сверху кнопки управления.
Кнопки управления (и их горячие клавиши):
Continue (F5) — беги дальше до следующей точки останова;
Step Over (F10) — выполни текущую строку и остановись на следующей;
Step Into (F11) — если в строке вызов функции, «войди» внутрь неё;
Step Out (Shift+F11) — доработай текущую функцию и выйди из неё.
💡Совет
Самый ходовой сценарий: поставить точку останова перед подозрительным местом и идти Step Over (F10) строка за строкой, глядя, как меняются переменные в панели Variables. Момент, где значение стало «не тем», — и есть место бага.
breakpoint() — отладчик из кода
С Python 3.7 в язык встроена функция breakpoint(). Поставьте её в любом месте скрипта — при запуске из терминала программа остановится там и откроется текстовый отладчик pdb:
📘debug_demo.py (запускать локально)
def average(nums):
total = sum(nums)
breakpoint() # программа остановится здесь
return total / len(nums)
print(average([3, 4, 8]))
В приглашении (Pdb) работают короткие команды:
p total — напечатать значение переменной (print);
n — следующая строка (next, как Step Over);
s — шаг внутрь функции (step, как Step Into);
c — продолжить до конца или следующего breakpoint (continue);
l — показать код вокруг текущей строки (list);
q — выйти из отладчика (quit).
pdb выручает там, где нет VS Code: на сервере по ssh, в чужом окружении, в CI.
Потренируемся «быть отладчиком»
Браузерная песочница курса не умеет останавливать код, но навык «смотреть значения по шагам» можно тренировать и здесь. Ниже функция с багом. Прочитайте её глазами «отладчика»: мысленно выполните строку за строкой для [5, 5, 5], записывая значения total и count на каждом витке циклаКонструкция, повторяющая блок кода: for перебирает элементы, while — пока условие истинно.. Затем проверьте догадку, добавив print (наш «ручной отладчик»), и почините функцию:
Заданиерешение.py
Функция mean(nums) должна возвращать среднее арифметическое, но для [5, 5, 5] возвращает не 5. Пройдите по коду «как отладчик» (можно добавить print внутри цикла), найдите строку с багом и почините её.
⚠️ Частые ошибки новичков
Ошибка 1. Запускать «обычным» запуском и ждать остановки на красной точке. Точки останова работают только при запуске с отладкой (F5), а не при обычном python файл.py или кнопке ▶.
Ошибка 2. Забыть breakpoint() в коде и закоммитить его. Программа будет «зависать» у всех, кто её запустит. Перед коммитом ищите забытые breakpoint() и отладочные print.
Ошибка 3. Всегда выбирать Step Into (F11) и «проваливаться» в библиотечные функции. Чаще нужен Step Over (F10): строка выполняется целиком, без экскурсии во внутренности print или sum.
❓Проверь себя
Что делает точка останова (breakpoint)?
Чем Step Over (F10) отличается от Step Into (F11)?
Какая команда pdb печатает значение переменной x?
Что запомнить
Отладчик — «стоп-кадр» программы: пауза на строке, все переменные видны, выполнение по шагам.
VS Code: клик слева от номера строки → красная точка, запуск отладки — F5, шаг — F10.
breakpoint() в коде открывает pdb: p — печать, n — шаг, c — продолжить, q — выход.
print-отладка тоже валидна, но отладчик показывает больше и не требует менять код.
Комментарии
Загрузка…
Загрузка комментариев…