Отладка Python в VS Code: точки останова вместо print
Пошаговая настройка отладчика Python в VS Code: где ставить точки останова, как читать переменные и почему это быстрее, чем расставлять print по всему коду. Займёт минут пятнадцать.

Вы дописали функцию, она выдаёт не то, и вы делаете привычное: расставляете print по строкам, запускаете, читаете вывод, стираете половину, добавляете новые. Через десять итераций терминал завален мусором, а причина всё ещё не ясна. Отладчик в VS Code решает ту же задачу иначе: вы ставите точку останова, программа замирает на нужной строке, и вы видите значения всех переменных сразу — без единого print. Ниже — как это настроить и запустить. Понадобится минут пятнадцать, дальше вы не вернётесь к печати в консоль.
Материал написан для VS Code 1.9x и расширения Python от Microsoft (пакет ms-python.python с отладчиком debugpy). В более старых версиях интерфейс панелей мог называться иначе, но точки останова и просмотр переменных работают так же.
Что нужно иметь до начала
- Установленный VS Code (проверьте: Help → About, версия 1.85 или новее).
- Python 3.8+ на машине. В терминале
python --versionилиpython3 --versionдолжна показать версию. - Расширение Python от Microsoft. Откройте вкладку Extensions (значок кубиков слева), найдите «Python», издатель Microsoft, нажмите Install. Вместе с ним подтянется
Pylanceи отладчикdebugpy— отдельно ставить не нужно. - Выбранный интерпретатор. Нажмите
Ctrl+Shift+P(на macOSCmd+Shift+P), введите Python: Select Interpreter и выберите нужный. В правом нижнем углу или в статус-баре появится версия Python — значит, интерпретатор подхватился.
Шаг 1. Возьмите файл с ошибкой
Чтобы отладчику было что показывать, нужен код с наблюдаемым поведением. Создайте файл example.py с функцией, которая считает среднее, но спотыкается на пустом списке:
# example.py — Python 3.8+
def average(numbers):
total = 0
for value in numbers:
total += value
return total / len(numbers) # упадёт на пустом списке
def main():
datasets = [
[10, 20, 30],
[], # вот здесь будет ZeroDivisionError
[5, 5, 5, 5],
]
for data in datasets:
result = average(data)
print(f"Среднее {data}: {result}")
if __name__ == "__main__":
main()
Запустите файл как обычно (кнопка Run сверху или python example.py). Вы увидите ZeroDivisionError: division by zero. Причина понятна из примера, но представьте, что список приходит из базы и вы не знаете, какой именно вызов ломается. Здесь отладчик и выигрывает.
Шаг 2. Поставьте точку останова
Точка останова* — это метка на строке, на которой выполнение замрёт, и вы сможете осмотреть состояние программы. Наведите курсор на левое поле редактора, слева от номера строки. Появится бледный красный кружок. Кликните на строке return total / len(numbers) — кружок станет ярко-красным. Точка поставлена.
Проверка: в панели Run and Debug (значок с жуком и стрелкой слева, или Ctrl+Shift+D) внизу есть список Breakpoints, и ваша точка там появилась с указанием файла и строки.
* Точка останова (breakpoint) — место в коде, где отладчик приостанавливает выполнение, чтобы вы могли посмотреть значения переменных и пойти дальше по шагам.
Шаг 3. Запустите под отладчиком
Нажмите F5. Если VS Code спросит конфигурацию — выберите Python File (запуск текущего файла). Программа стартует, доходит до вашей строки внутри первого вызова average([10, 20, 30]) и останавливается: строка подсветится, слева от неё встанет жёлтая стрелка.
Проверка: вверху появилась панель управления отладкой с кнопками продолжения и шагов, а слева в панели Run and Debug раскрылась секция Variables.
Шаг 4. Читайте переменные без print
Пока программа стоит на точке останова, слева в секции Variables → Locals видны все локальные переменные текущей функции: numbers со значением [10, 20, 30], total равное 60, value. Наведите курсор на любую переменную прямо в коде — VS Code покажет её значение во всплывающей подсказке.
Чтобы проверить произвольное выражение, откройте секцию Watch, нажмите плюс и впишите, например, len(numbers). Значение обновляется на каждой остановке. Это и есть замена print: вы спрашиваете любое выражение, ничего не меняя в коде.
Отладчик показывает не то, что вы догадались напечатать, а всё состояние сразу. Половина багов раскрывается в тот момент, когда вы видите переменную, о которой даже не подумали её печатать.
Шаг 5. Идите по коду по шагам
Панель управления сверху — четыре главные кнопки. Разберём, чем они отличаются, потому что путаница между ними — частая причина «отладчик куда-то улетел».
| Действие | Клавиша | Что делает |
|---|---|---|
| Continue | F5 | Выполнять до следующей точки останова |
| Step Over | F10 | Выполнить строку целиком, не заходя внутрь вызванных функций |
| Step Into | F11 | Зайти внутрь функции на текущей строке |
| Step Out | Shift+F11 | Досчитать текущую функцию до конца и вернуться к вызвавшей |
Нажмите F5. Программа досчитает первый вызов, напечатает Среднее [10, 20, 30]: 20.0 и снова остановится на той же строке — но теперь внутри вызова с пустым списком. Посмотрите в Variables: numbers равно [], total равно 0, len(numbers) в Watch показывает 0. Причина ZeroDivisionError видна до того, как строка выполнилась.
Шаг 6. Остановиться только на проблемном случае
Останавливаться на каждой итерации утомительно. Кликните правой кнопкой по точке останова и выберите Edit Breakpoint → Expression. Впишите условие:
len(numbers) == 0Теперь отладчик замрёт только тогда, когда список пуст, и пролетит остальные вызовы. Это условная точка останова — прямая замена конструкции вроде if len(numbers) == 0: print(...), которую иначе пришлось бы вписывать в код и потом стирать.
Если не получилось
- «Python is not installed» или отладчик не стартует. Интерпретатор не выбран.
Ctrl+Shift+P→ Python: Select Interpreter, укажите путь к Python. Если списка нет — Python не установлен или не в PATH. - Точка останова серая с подсказкой «Breakpoint not bound». Отладчик запустил не тот файл или код до этой строки не доходит. Проверьте, что запускаете именно Python File, и что строка вообще выполняется.
- F5 запускает без остановки. Скорее всего активна конфигурация «Run без отладки» либо стоит галка отключения всех точек останова. В панели Run and Debug снимите «Deactivate Breakpoints» (иконка перечёркнутых точек сверху).
- «ModuleNotFoundError» под отладчиком, хотя обычный запуск работает. Отладчик стартует из корня рабочей папки, а не из папки файла. Проверьте рабочую директорию или откройте папку проекта через File → Open Folder, а не одиночный файл.
- Программа читает ввод, а окно консоли пустое. В конфигурации запуска для интерактивного ввода нужен внешний терминал. Об этом — в разделе про
launch.jsonниже.
Когда нужен launch.json
Кнопка F5 с выбором «Python File» покрывает большинство случаев. Отдельный файл конфигурации launch.json в папке .vscode нужен, когда запуск не сводится к «текущему файлу»: программа принимает аргументы командной строки, требует переменные окружения или читает ввод из консоли. Создать его можно через Run and Debug → create a launch.json file. Точные имена полей конфигурации меняются между версиями расширения — сверяйтесь с документацией по debugpy, ссылка ниже, вместо того чтобы вписывать поля по памяти.
Что делать дальше
Освойте панель Call Stack — она показывает цепочку вызовов, приведших к остановке, и позволяет кликнуть на вызывающую функцию, чтобы посмотреть её переменные. Дальше стоит попробовать logpoint (правый клик по полю → Add Logpoint) — это точка, которая не останавливает выполнение, а печатает выражение в консоль отладки. По сути тот же print, но добавляется и убирается без правки кода. После этого привычка расставлять и стирать print отпадёт сама.
Тест и проверочная: Быстрые ответы с объяснением, почему остальные варианты неверны
Спросить за 10 ₽Источники: Python debugging in VS Code — официальная документация, debugpy — репозиторий отладчика на GitHub
Частые вопросы
А если у меня нет расширения Python, только сам VS Code?
Отладчик не останавливается на точке останова, хотя она красная. Что делать?
Чем Step Over отличается от Step Into? Постоянно путаю.
Можно ли отлаживать, не меняя код print-ами вообще?
Программа ждёт ввод от пользователя, но консоль пустая и ничего не происходит.
У меня старая версия VS Code, интерфейс выглядит не так, как в статье. Сработает ли?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.