Отладка кода в Python
Стандартная библиотека Python включает в себя интерактивную библиотеку отладки под названием PDB.PDB имеет широкие возможности, наиболее распространенные является способностью «пошаговая» программой.
Чтобы сразу войти в пошаговую отладку, используйте:
python -m pdb
Это запустит отладчик в первой строке программы.
Обычно вы хотите нацелить определенный раздел кода для отладки. Для этого мы импортируем библиотеку pdb и используем _set_trace () _, чтобы прервать поток этого проблемного примера кода.
import pdb def divide(a, b): pdb.set_trace() return a/b # What's wrong with this? Hint: 2 != 3 print divide(1, 2)
Запуск этой программы запустит интерактивный отладчик.
python foo.py > ~/scratch/foo.py(5)divide() -> return a/b (Pdb)
Часто эта команда используется в одной строке, поэтому ее можно закомментировать одним символом #
import pdf; pdb.set_trace()
В (PDB) можно ввести оперативные команды. Эти команды могут быть командами отладчика или python. Для печати переменных можно использовать р из отладчика, или печать питона.
(Pdb) p a 1 (Pdb) print a 1
Чтобы увидеть список всех локальных переменных, используйте
locals
Это хорошие команды отладчика, которые нужно знать:
b | : set breakpoint at line *n* or function named *f*. # b 3 # b divide b: show all breakpoints. c: continue until the next breakpoint. s: step through this line (will enter a function). n: step over this line (jumps over a function). r: continue until the current function returns. l: list a window of code around this line. p : print variable named *var*. # p x q: quit debugger. bt: print the traceback of the current execution call stack up: move your scope up the function call stack to the caller of the current function down: Move your scope back down the function call stack one level step: Run the program until the next line of execution in the program, then return control back to the debugger next: run the program until the next line of execution in the current function, then return control back to the debugger return: run the program until the current function returns, then return control back to the debugger continue: continue running the program until the next breakpoint (or set_trace si called again)
Отладчик также может оценить python в интерактивном режиме:
-> return a/b (Pdb) p a+b 3 (Pdb) [ str(m) for m in [a,b]] ['1', '2'] (Pdb) [ d for d in xrange(5)] [0, 1, 2, 3, 4]
Если какие — либо из ваших имен переменных совпадают с командами отладчика, используйте восклицательный знак ‘! ‘перед переменной, чтобы явно ссылаться на переменную, а не на команду отладчика. Например, часто может случиться так , что вы используете имя переменной «C» для счетчика, и вы можете распечатать его в отладчике. команда просто «C» будет продолжать выполнение до следующей точки останова. Вместо того, чтобы использовать «C!» , Чтобы вывести значение переменной следующим образом :
(Pdb) !c 4
Через IPython и ipdb
Если IPython (или Jupyter ) установлены, отладчик может быть вызван:
import ipdb ipdb.set_trace()
По достижении код выйдет и напечатает:
/home/usr/ook.py(3)() 1 import ipdb 2 ipdb.set_trace() ----> 3 print("Hello world!") ipdb>
Понятно, что это означает, что нужно редактировать код. Есть более простой способ:
from IPython.core import ultratb sys.excepthook = ultratb.FormattedTB(mode='Verbose', color_scheme='Linux', call_pdb=1)
Это приведет к вызову отладчика в случае возникновения необработанного исключения.
Удаленный отладчик
Иногда вам нужно отлаживать код питона , который выполняется другим процессом и и в этом случае rpdb пригодится.
rpdb — это оболочка для pdb, которая перенаправляет stdin и stdout в обработчик сокетов. По умолчанию он открывает отладчик на порт 4444
# In the Python file you want to debug. import rpdb rpdb.set_trace()
И тогда вам нужно запустить это в терминале, чтобы подключиться к этому процессу.
# Call in a terminal to see the output $ nc 127.0.0.1 4444
И вы получите PDB Promt
> /home/usr/ook.py(3)() -> print("Hello world!") (Pdb)
Как использовать отладчик pdb для Python приложений
Разбираемся с утилитой для отладки кода на Python — pdb. В материале рассмотрены приёмы работы с отладчиком pdb, а также его основные возможности.
pdb — это встроенный отладчик для Python, который, в отличие от print() , позволяет отлаживать программу в процессе её работы.
Отладка Python-кода с помощью print
Как уже говорилось ранее, кто-то используют print() для отображения информации, которая помогает понять, что происходит в коде. Кто-то использует логи для тех же целей, но давайте не путать использование логов на продакшене и случаи, когда их используют во время поиска багов в коде и после удаляют.
Но самая большая проблема в использовании print() – это необходимость вносить изменения в код и перезапускать приложение, чтобы увидеть изменения. Давайте разберёмся, почему отладчики эффективнее.
Команды Python-отладчика
Главная задача отладчика – предоставить возможность заглянуть в процесс выполнения кода. Так, например, можно просмотреть стек вызовов, узнать значения переменных, установить брейкпоинты или запустить выполнение кода построчно. Можно провести аналогию с тем, как автомеханик заглядывает под капот автомобиля и начинает перебирать деталь за деталью, пока не найдет причину поломки.
Если вы работаете с Python, то можете не только просматривать код во время отладки, но даже запускать код из командной строки или изменять значения переменных на лету.
Python есть встроенный отладчик под названием pdb. Это простая консольная утилита, которая обладает основной функциональностью для отладки кода. Но если вы ищете что-то более продвинутое, то стоит обратить внимание на ipdb – отладчик с функциональностью из IPython.
Проще всего вызвать отладчик pdb из кода, где вы работаете:
import pdb; pdb.set_trace()
Как только интерпретатор доберётся до этой строчки, запустится отладчик и в консоли будут доступны новые команды.
list()
Эта команда покажет часть кода, на выполнении которой сейчас находится интерпретатор. Можно передать два аргумента first и last для просмотра определённого участка кода. Если указать только first, то будет выведен код вокруг искомой строки.
up(p) и down(d)
Эти команды используются для передвижения по стеку вызовов. С их помощью можно отследить, откуда была вызвана текущая функция.
step() и next()
Другая пара не менее важных команд. С их помощью можно выполнять код построчно. Единственное различие между ними в том, что next() перейдёт к следующей строке вне зависимости от вызываемых функций, а step() перейдёт в вызванную функцию, если это возможно.
break()
Эта команда позволяет создавать брейкпоинты без внесений изменений в код. Ниже разберём этот этап более детально.
Краткий список команд отладчика pdb:
- args() — выводит аргументы функции;
- continue() или (cont) — продолжит выполнение до первого брейкпоинта или до завершения программы;
- help() — выводит список доступных команд или подсказки по определённой команде;
- jump() — перепрыгивает к выполнению указанной строчки кода;
- list() — выводит исходный код программы вокруг выбранной строки;
- expression() — выводит значение выражения;
- pp — выводит значение в «красивом» виде;
- quit или exit() — отменяет выполнение программы;
- return() — завершает выполнение текущей функции.
Продолжаем изучать Python-отладчик
Рассмотренный ранее способ работы с отладчиком требовал внесения изменения в код для вывода чего-нибудь или установки брейкпоинта. Но часто при работе с внешними библиотеками появляется необходимость в их отладке. Конечно, можно открыть исходный код библиотеки и вызвать pdb .
Но теперь есть возможность запускать приложение напрямую из отладчика без внесения изменения в код. Для этого воспользуемся следующей командой:
$ python3 -m pdb
Давайте разберём на примере. Есть простое приложение, которое отслеживает рабочее время. Для её работы используется библиотека requests , отвечающая за выполнение HTTP-запросов. Попробуем прервать выполнение во время запроса. Как это сделать? Запустим приложение через отладчик и установим брейкпоинт внутри библиотеки requests .
$ python3 -m pdb run.py > /Users/. /run.py(1)() -> from TimeLog.app import run_app (Pdb) b requests/sessions.py:555 Breakpoint 1 at /. /lib/python3.6/site-packages/requests/sessions.py:555 (Pdb) c
Как можно заметить, не нужно указывать полный путь до библиотеки. Можно указать относительную ссылку от sys.path . Таким же образом можно отлаживать и ваше приложение.
Теперь куда проще отлаживать код. Не надо вносить изменения в приложение или во внешние библиотеки.
Но что делать, если в приложении происходит много вызовов, а вам надо обработать только какой-то определённый? Можно точно указать условие, при выполнении которого отладчик будет прерывать выполнение приложения.
В данном примере прерывание произойдёт только в случае, если json будет иметь в себе ключ time_entry .
$ python3 -m pdb run.py > /Users/. /run.py(1)() -> from TimeLog.app import run_app (Pdb) b requests/sessions.py:555, json is not None and 'time_entry' in json Breakpoint 1 at /Users/. /lib/python3.6/site-packages/requests/sessions.py:555 (Pdb) c
Отладка кода Django
Если вы используете Django, то скорее всего знаете, что, если в настройках значение параметра DEBUG установлено как True , то для каждого исключения будет выводиться отдельная страница с указанием типа исключения, стек вызовов, локальные переменные и т.д.
Если вы хотите прокачать отладчик, то установите django-extensions и используйте команду runserver_plus для запуска сервера. Также можно указать пароль для доступа к отладке следующей командой:
WERKZEUG_DEBUG_PIN=1234 ./manage.py runserver_plus
Прим. перев. В Werkzeug, начиная с версии 0.11, появилась возможность доступа по паролю к отладчику. Это сделано для повышения безопасности при попытках несанкционированного доступа.
Если вы используете django-extensions, то получите страницу со всеми вызовами, кодом и окном отладчика.
Процесс отладки осуществляется с помощью WSGI библиотеки Werkzeug.
Существует множество способов отладки приложений, но специализированные инструменты могут дать вам огромное преимущество по сравнению с другими разработчиками и помогут сэкономить время и силы при поиске багов. Cреды разработки предлагают широкий выбор средств отладки, подробнее о них в нашей подборке лучших IDE и редакторов кода для Python.
Отладка
Отладка, или debugging, — это поиск (локализация), анализ и устранение ошибок в программном обеспечении, которые были найдены во время тестирования.

Виды ошибок
Ошибки компиляции
Это простые ошибки, которые в компилируемых языках программирования выявляет компилятор (программа, которая преобразует текст на языке программирования в набор машинных кодов). Если компилятор показывает несколько ошибок, отладку кода начинают с исправления самой первой, так как она может быть причиной других.
В интерпретируемых языках (например Python) текст программы команда за командой переводится в машинный код и сразу исполняется. К моменту обнаружения ошибки часть программы уже может исполниться.
Ошибки компоновки
Ошибки связаны с разрешением внешних ссылок. Выявляет компоновщик (редактор связей) при объединении модулей программы. Простой пример — ситуация, когда требуется обращение к подпрограмме другого модуля, но при компоновке она не найдена. Ошибки также просто найти и устранить.
Ошибки выполнения (RUNTIME Error)
Ошибки, которые обнаруживают операционная система, аппаратные средства или пользователи при выполнении программы. Они считаются непредсказуемыми и проявляются после успешной компиляции и компоновки. Можно выделить четыре вида проявления таких ошибок:
- сообщение об ошибке, которую зафиксировали схемы контроля машинных команд. Это может быть переполнение разрядной сетки (когда старшие разряды результата операции не помещаются в выделенной области памяти), «деление на ноль», нарушение адресации и другие;
- сообщение об ошибке, которую зафиксировала операционная система. Она же, как правило, и документирует ошибку. Это нарушение защиты памяти, отсутствие файла с заданным именем, попытка записи на устройство, защищенное от записи;
- прекращение работы компьютера или зависание. Это и простые ошибки, которые не требуют перезагрузки компьютера, и более сложные, когда нужно выключать ПК;
- получение результатов, которые отличаются от ожидаемых. Программа работает стабильно, но выдает некорректный результат, который пользователь воспринимает за истину.
Профессия / 16 месяцев
Тестировщик-автоматизатор
Лучший выбор для быстрого старта в IT

Ошибки выполнения можно разделить на три большие группы.
Ошибки определения данных или неверное определение исходных данных. Они могут появиться во время выполнения операций ввода-вывода.
К ним относятся:
- ошибки преобразования;
- ошибки данных;
- ошибки перезаписи.
Как правило, использование специальных технических средств для отладки (API-логгеров, логов операционной системы, профилировщиков и пр.) и программирование с защитой от ошибок помогает обнаружить и решить лишь часть из них.
Логические ошибки. Они могут возникать из ошибок, которые были допущены при выборе методов, разработке алгоритмов, определении структуры данных, кодировании модуля.
В эту группу входят:
- ошибки некорректного использования переменных. Сюда относятся неправильный выбор типов данных, использование индексов, выходящих за пределы определения массивов, использование переменных до присвоения переменной начального значения, нарушения соответствия типов данных;
- ошибки вычислений. Это некорректная работа с переменными, неправильное преобразование типов данных в процессе вычислений;
- ошибки взаимодействия модулей или межмодульного интерфейса. Это нарушение типов и последовательности при передаче параметров, области действия локальных и глобальных переменных, несоблюдение единства единиц измерения формальных и фактических параметров;
- неправильная реализация логики при программировании.
Ошибки накопления погрешностей. Могут возникать при неправильном округлении, игнорировании ограничений разрядной сетки, использовании приближенных методов вычислений и т.д.

Станьте тестировщиком – это лучший выбор для быстрого старта в IT
Методы отладки программного обеспечения
Метод ручного тестирования
Отладка программы заключается в тестировании вручную с помощью тестового набора, при работе с которым была допущена ошибка. Несмотря на эффективность, метод не получится использовать для больших программ или программ со сложными вычислениями. Ручное тестирование применяется как составная часть других методов отладки.
Метод индукции
В основе отладки системы — тщательный анализ проявлений ошибки. Это могут быть сообщения об ошибке или неверные результаты вычислений. Например, если во время выполнения программы завис компьютер, то, чтобы найти фрагмент проявления ошибки, нужно проанализировать последние действия пользователя. На этапе отладки программы строятся гипотезы, каждая из них проверяется. Если гипотеза подтвердилась, информация об ошибке детализируется, если нет — выдвигаются новые.
Вот как выглядит процесс:

Важно, чтобы выдвинутая гипотеза объясняла все проявления ошибки. Если объясняется только их часть, то либо гипотеза неверна, либо ошибок несколько.
Метод дедукции
Сначала специалисты предлагают множество причин, по которым могла возникнуть ошибка. Затем анализируют их, исключают противоречащие имеющимся данным. Если все причины были исключены, проводят дополнительное тестирование. В обратном случае наиболее вероятную причину пытаются доказать.

Метод обратного прослеживания
Эффективен для небольших программ. Начинается с точки вывода неправильного результата. Для точки выдвигается гипотеза о значениях основных переменных, которые могли привести к ошибке. Далее на основании этой гипотезы строятся предположения о значениях переменных в предыдущей точке. Процесс продолжается до момента, пока не найдут ошибку.
Как выполняется отладка в современных IDE
Ранние отладчики, например gdb, представляли собой отдельные программы с интерфейсами командной строки. Более поздние, например первые версии Turbo Debugger, были автономными, но имели собственный графический интерфейс для облегчения работы. Сейчас большинство IDE имеют встроенный отладчик. Он использует такой же интерфейс, как и редактор кода, поэтому можно выполнять отладку в той же среде, которая используется для написания кода.
Отладчик позволяет разработчику контролировать выполнение и проверять (или изменять) состояние программ. Например, можно использовать отладчик для построчного выполнения программы, проверяя по ходу значения переменных. Сравнение фактических и ожидаемых значений переменных или наблюдение за ходом выполнения кода может помочь в отслеживании логических (семантических) ошибок.
Пошаговое выполнение — это набор связанных функций отладчика, позволяющих поэтапно выполнять код.
Шаг с заходом (step into)
Команда выполняет очередную инструкцию, а потом приостанавливает процесс, чтобы с помощью отладчика было можно проверить состояние программы. Если в выполняемом операторе есть вызов функции, step into заставляет программу переходить в начало вызываемой функции, где она приостанавливается.
Шаг с обходом (step over)
Команда также выполняет очередную инструкцию. Однако когда step into будет входить в вызовы функций и выполнять их строка за строкой, step over выполнит всю функцию, не останавливаясь, и вернет управление после ее выполнения. Команда step over позволяет пропустить функции, если разработчик уверен, что они уже исправлены, или не заинтересован в их отладке в данный момент.
Шаг с выходом (step out)
В отличие от step into и step over, step out выполняет не следующую строку кода, а весь оставшийся код функции, исполняемой в настоящее время. После возврата из функции он возвращает управление разработчику. Эта команда полезна, когда специалист случайно вошел в функцию, которую не нужно отлаживать.
Как правило, при пошаговом выполнении можно идти только вперед. Поэтому легко перешагнуть место, которое нужно проверить. Если это произошло, необходимо перезапустить отладку.
У некоторых отладчиков (таких как GDB 7.0, Visual Studio Enterprise Edition 15.5 и более поздних версий) есть возможность вернуться на шаг назад. Это полезно, если пропущена цель либо нужно повторно проверить выполненную инструкцию.
Тестировщик-автоматизатор
Как ворваться в IT, даже если вы не умеете программировать? Стать тестировщиком. Для старта достаточно базовых знаний ПК. А начать работать можно уже через 4 месяца обучения.
Отладка кода Python
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Visual Studio предоставляет широкие возможности отладки для Python, включая присоединение к выполняемым процессам, вычисление выражений в окнах контрольных значений и интерпретации, проверку локальных переменных, точки останова, инструкции «Шаг с заходом», «Шаг с выходом», «Шаг с обходом», команду Задать следующий оператор и многое другое.
Также ознакомьтесь со следующими статьями об отладке:
- Удаленная отладка в Linux
- Отладка в смешанном режиме для Python/C++
- Символы для отладки в смешанном режиме
Python в Visual Studio поддерживает возможность отладки без проекта. Откройте в редакторе автономный файл Python, щелкните область редактора правой кнопкой мыши и выберите пункт Запуск с отладкой. Visual Studio запустит скрипт с глобальной средой по умолчанию (см. статью о средах Python) и без аргументов. В дальнейшем у вас будет полная поддержка отладки.
Чтобы управлять средой и аргументами, создайте проект для кода, что можно легко сделать с помощью шаблона проекта На основе существующего кода Python.
Основы отладки
Базовый рабочий процесс отладки включает в себя настройку точек останова, пошаговое выполнение кода, проверку значений и обработку исключений, как описано в следующих разделах.
Сеанс отладки можно начать с помощью команды Отладка>Начать отладку, кнопки Запуск на панели инструментов или клавиши F5. В результате запускается файл запуска проекта (выделен полужирным шрифтом в обозревателе решений) с активным окружением проекта и аргументами командной строки или путями поиска, указанными в свойствах проекта (см. раздел Параметры отладки проекта). Если в Visual Studio 2017 версии 15.6 и более поздних версий не задан файл запуска, отображается оповещение. В более ранних версиях может открыться окно вывода с выполняющимся интерпретатором Python либо же окно вывода может появиться на короткий промежуток времени и исчезнуть. В любом из этих случаев щелкните правой кнопкой мыши нужный файл и выберите пункт Задать как файл запуска.
Отладчик всегда начинает работу с запуска активной среды Python для проекта. Дополнительные сведения о том, как сделать активным другое окружение, см. в руководстве по выбору окружения Python для проекта.
Точки останова
Точки останова прекращают выполнение кода в заданной точке, чтобы вы могли проверить состояние программы. Задайте точку останова, щелкнув левое поле редактора кода или щелкнув правой кнопкой мыши строку кода и выбрав пункт Точка останова>Вставить точку останова. В каждой строке с точкой останова отображается красная точка.

Чтобы удалить точку останова, щелкните красную точку или правой кнопкой мыши щелкните строку кода и выберите пункт Точка останова>Удалить точку останова. Ее также можно просто отключить с помощью команды Точка останова>Отключить точку останова.
Некоторые точки останова в коде Python могут быть неожиданными для тех разработчиков, которые привыкли использовать другие языки программирования. При использовании языка Python весь файл является исполняемым кодом, таким образом Python запускает файл во время загрузки для обработки определений классов верхнего уровня или функций. Если задана точка останова, отладчик может остановиться в процессе объявления класса. Это верное, хотя и несколько неожиданное поведение.
Вы можете настроить условия, при которых будут инициироваться точки останова, например, выполнение будет останавливаться только в том случае, когда для переменной задано определенное значение или определенный диапазон значений. Чтобы задать условия, щелкните красную точку останова правой кнопкой мыши, выберите Условие и создайте выражения с помощью кода Python. Подробные сведения об этой возможности в Visual Studio см. в разделе Условия точки останова.
При задании условий можно также задать действие, создать сообщение для создания записи в окне вывода и при необходимости настроить автоматическое продолжение выполнения. При этом создается так называемая точка трассировки, при этом добавлять код ведения журнала непосредственно в приложение не требуется:

Пошаговое прохождение кода
При остановке в точке останова можно применить различные способы пошаговой отладки кода или выполнения блоков кода до следующей остановки. Эти команды доступны в нескольких местах, включая верхнюю панель инструментов отладки, меню Отладка, контекстное меню, открываемое правой кнопкой мыши в редакторе кода, а также с помощью сочетаний клавиш (не всегда и не везде).
| Компонент | Клавиши | Description |
|---|---|---|
| Продолжить | F5 | Код выполняется до следующей точки останова. |
| Шаг с заходом | F11 | Выполняется следующий оператор, после чего процесс останавливается. Если следующий оператор является вызовом функции, отладчик останавливается на первой строке вызываемой функции. |
| Шаг с обходом | F10 | Выполняется следующий оператор, включая вызов функции (выполняя весь ее код), и применяется любое возвращаемое значение. Пошаговое выполнение позволяет легко пропустить функции, которые не нужно отлаживать. |
| Шаг с выходом | Shift+F11 | Код выполняется до окончания текущей функции, а затем переходит к вызывающей инструкции. Эта команда полезна в том случае, если не требуется отладка остальной части текущей функции. |
| Выполнить до текущей позиции | CTRL+F10 | Код выполняется до расположения курсора в редакторе. Эта команда позволяет легко пропустить сегмент кода, для которого не нужно делать отладку. |
| Задать следующий оператор | CTRL+SHIFT+F10 | Текущая точка выполнения в коде изменяется на расположение курсора. Эта команда позволяет полностью пропустить выполнение сегмента кода, например, если известно, что код неисправен или приводит к нежелательным побочным эффектам. |
| Показать следующий оператор | ALT+NUM* | Переход к следующему выполняемому оператору. Эта команда удобна, когда вы изучаете код и не помните, где остановился отладчик. |
Просмотр и изменение значений
При остановке отладчика можно проверить и изменить значения переменных. Окно контрольных значений позволяет отслеживать отдельные переменные, а также пользовательские выражения. (Общие сведения см. в статье Проверка переменных.)
Чтобы просмотреть подсказку для значения, просто наведите указатель мыши на любую переменную в редакторе. Выберите значение, чтобы изменить его:

Окно видимых переменных (Отладка>Окна>Видимые) содержит переменные и выражения, близкие к текущему оператору. Чтобы изменить значение, дважды щелкните в столбце значения или выберите и нажмите клавишу F2.

Окно локальных переменных (Отладка>Окна>Локальные) содержит все переменные в текущей области, которые можно изменить.

Дополнительные сведения об использовании окон Видимые и Локальные см. в статье Проверка переменных в окнах «Видимые» и «Локальные».
Окно контрольных значений (Отладка>Окна>Контрольное значение>Контрольные значения 1–4) позволяет вводить произвольные выражения Python и просматривать результаты. Выражения повторно вычисляются для каждого шага:

При проверке строковых значений (в данном случае str , unicode , bytes и bytearray считаются строками) справа от них появляется значок лупы. При выборе этого значка отображается всплывающее диалоговое окно со строковым значением без кавычек, с переносом по словам и прокруткой, что удобно при работе с длинными строками. Щелкнув стрелку раскрывающегося списка возле значка, можно выбрать тип визуализации: обычный текст, HTML, XML и JSON.

Визуализации JSON, HTML и XML отображаются в отдельных всплывающих окнах с подсветкой синтаксиса и представлением в виде дерева.
Исключения
Если в процессе отладки возникает ошибка, для которой нет обработчика исключений, отладчик останавливается в точке исключения.

На этом этапе можно проверить состояние программы, включая стек вызовов. При попытке выполнить пошаговую отладку кода исключение продолжает появляться, пока не будет обработано или пока не завершится программа.
Команда меню Отладка>Окна>Параметры исключений выводит окно, в котором можно развернуть исключения Python:

Флажок каждого исключения определяет, всегда ли должен останавливаться отладчик при возникновении исключения. Установите этот флажок, если требуется чаще прерывать выполнение для конкретного исключения.
По умолчанию большинство исключений прерываются, если обработчик исключений не обнаруживается в исходном коде. Чтобы изменить такое поведение, щелкните правой кнопкой мыши любое исключение и измените значение параметра Продолжить после необработанной ошибки в коде пользователя. Снимите этот флажок, если требуется прерывать исключение реже.
Чтобы настроить исключение, которое не отображается в этом списке, нажмите кнопку Добавить. Имя добавляемого исключения должно соответствовать полному имени исключения.
Параметры отладки проекта
По умолчанию отладчик запускает программу с помощью стандартного средства запуска Python без аргументов командной строки и других особых путей или условий. Параметры запуска можно изменить с помощью свойств отладки проекта, щелкнув правой кнопкой мыши проект в обозревателе решений и выбрав пункт Свойства, а затем вкладку Отладка.

Параметры режима запуска
| Параметр | Описание |
|---|---|
| Стандартное средство запуска Python | Используется при отладке кода, написанного на портативном Python, совместимом с интерпретатором CPython, IronPython и такими версиями, как Stackless Python. Он обеспечивает самую удобную отладку чистого кода Python. Это средство запуска используется при присоединении к выполняющемуся процессу python.exe. Также это средство запуска предоставляет возможность отладки в смешанном режиме для CPython, что позволяет беспрепятственно переключаться между кодом C/C++ и кодом Python. |
| Веб-средство запуска | Запускает браузер по умолчанию при загрузке и позволяет выполнять отладку шаблонов. Дополнительные сведения см. разделе Debugging (Отладка). |
| Веб-средство запуска Django | Аналогично веб-средству запуска и отображается только для обеспечения обратной совместимости. |
| Средство запуска IronPython (.NET) | Использует отладчик .NET, который работает только с IronPython, но позволяет переключаться между любыми проектами на языке .NET, включая C# и VB. Это средство запуска используется при присоединении к выполняющемуся процессу .NET, в котором размещается IronPython. |
Параметры запуска (пути поиска, аргументы запуска и переменные среды)
| Параметр | Описание |
|---|---|
| Пути поиска | Эти значения совпадают со сведениями, отображаемыми в узле Пути поиска проекта в обозревателе решений. Это значение можно изменить здесь, но проще использовать обозреватель решений, где можно просматривать папки и пути автоматически преобразуются в относительную форму. |
| Аргументы скрипта | Эти аргументы добавляются к команде, используемой для запуска скрипта, и отображаются после имени файла скрипта. Первый элемент доступен для скрипта в виде sys.argv[1] , второй в виде sys.argv[2] и т. д. |
| Аргументы интерпретатора | Эти аргументы добавляются в командную строку средства запуска перед именем скрипта. Существуют следующие общие аргументы: -W . для управления предупреждениями, -O для незначительной оптимизации программы и -u для использования операций ввода-вывода без буферизации. Пользователи IronPython могут использовать это поле для передачи параметров -X , таких как -X:Frames или -X:MTA . |
| Путь к интерпретатору | Переопределяет путь, связанный с текущей средой. Значение может быть полезным при запуске скрипта с нестандартным интерпретатором. |
| Переменные среды | В этом многострочном текстовом поле можно добавить записи в формате =. Так как этот параметр применяется последним поверх существующих переменных глобальной среды и после того, как установлен PYTHONPATH в соответствии с параметром Пути поиска, он может использоваться для переопределения любой из этих переменных в ручном режиме. |
Интерактивное окно и окно интерпретации
Существуют два интерактивных окна, которые можно использовать во время сеанса отладки: стандартное окно интерпретации Visual Studio и интерактивное окно отладки Python.
Окно интерпретации (Отладка>Окна>Интерпретация) используется для быстрого вычисления выражений Python и проверки или назначения переменных в выполняющейся программе. Дополнительные сведения см. в статье Окно интерпретации.
Интерактивное окно отладки Python (Отладка>Окна>Интерактивное окно отладки Python) имеет больше возможностей, обеспечивая работу в интерактивной среде REPL во время отладки, включая написание и выполнение кода. Оно автоматически подключается к любому процессу, запущенному в отладчике с помощью стандартного средства запуска Python (включая процессы, присоединенные с помощью команды Отладка>Присоединение к процессу). Тем не менее оно недоступно при использовании отладки в смешанном режиме C/C++.

Интерактивное окно отладки поддерживает специальные команды метаданных в дополнение к стандартным командам REPL.
| Команда | Аргументы | Description |
|---|---|---|
| $continue , $cont , $c | Запускает выполнение программы, начиная с текущего оператора. | |
| $down , $d | Переместите текущий кадр на один уровень вниз в трассировке стека. | |
| $frame | Отображает идентификатор текущего кадра. | |
| $frame | Идентификатор кадра | Переключает текущий кадр на кадр с указанным идентификатором. |
| $load | Загружает команды из файла и выполняет их до завершения. | |
| $proc | Отображает идентификатор текущего процесса. | |
| $proc | Идентификатор процесса | Переключает текущий процесс на процесс с указанным идентификатором. |
| $procs | Отображает список отлаживаемых в текущий момент процессов. | |
| $stepin , $step , $s | При возможности выполняет шаг с заходом в следующий вызов функции. | |
| $stepout , $return , $r | Выходит из текущей функции. | |
| $stepover , $until , $unt | Обходит вызов следующей функции. | |
| $thread | Отображает идентификатор текущего потока. | |
| $thread | Идентификатор потока | Переключает текущий поток на поток с указанным идентификатором. |
| $threads | Отображает список отлаживаемых в текущий момент потоков. | |
| $up , $u | Перемещение текущего кадра на один уровень вверх в трассировке стека. | |
| $where , $w , $bt | Отображает список кадров текущего потока. |
Стандартные окна отладчика, такие как окна процессов, потоков и стека вызовов, не синхронизируются с интерактивным окном отладки. Изменение активного процесса, потока или кадра в интерактивном окне отладки не влияет на другие окна отладки. Аналогичным образом, изменение активного процесса, потока или кадра в других окнах отладки не влияет на интерактивное окно отладки.
Использование отладчика предыдущих версий
Visual Studio 2017 версии 15.8 и более поздних версий использует отладчик на основе ptvsd версии 4.1 и более поздних. Visual Studio 2019 версии 16.5 и последующих версий использует отладчик на основе debugpy. Эти версии отладчика совместимы с Python 2.7, а также Python 3.5 и последующих версий. Если вы используете Python 2.6 и 3.1–3.4 или IronPython, Visual Studio отображает ошибку Отладчик не поддерживает эту среду Python:

В этих случаях необходимо использовать отладчик прежних версий (который является отладчиком по умолчанию в Visual Studio 2017 версии 15.7 и более ранних). Выберите команду меню Сервис>Параметры, перейдите в каталог Python>Отладка и выберите Использовать отладчик предыдущих версий.
Если вы установили в текущей среде более раннюю версию ptvsd (например, для удаленной отладки нужна более ранняя версия 4.0.x или 3.x), Visual Studio отображает ошибку или предупреждение.
Ошибка Не удалось загрузить пакет отладчика появляется, когда вы установили ptvsd 3.x:

В этом случае выберите Использование отладчика предыдущих версий, нажмите Использовать отладчик предыдущих версий и перезапустите отладчик.
Предупреждение Пакет отладчика устарел появляется, если вы установили более раннюю версию ptvsd 4.x:

Хотя вы можете пропустить это предупреждение для некоторых версий ptvsd, Visual Studio может работать неправильно.
Для управления установкой ptvsd:

- Перейдите на вкладку Пакеты в окне Окружения Python.
- В поле поиска введите «ptvsd» и проверьте установленную версию ptvsd:
- Если версия ниже, чем 4.1.1a9 (версия в составе Visual Studio), нажмите X справа от пакета, чтобы удалить старую версию. Затем Visual Studio будет использовать версию, входящую в комплект. (Также можно удалить версию в PowerShell с помощью pip uninstall ptvsd .)
- Кроме того, можно обновить пакет ptvsd до последней версии, следуя инструкциям из раздела Устранение неполадок.
Устранение неполадок
Для Visual Studio 2019 (версии 16.4 и предыдущих) обновите отладчик ptvsd.
При наличии проблем с отладчиком сначала обновите его версию следующим образом:

- Перейдите на вкладку Пакеты в окне Окружения Python.
- Введите ptvsd —upgrade в поле поиска и выберите Выполнить команду: pip install ptvsd —upgrade. (Также можно использовать эту из PowerShell.) Если проблемы не удается устранить, отправьте сообщение о проблеме в репозиторий PTVS на сайте GitHub.
Примечание. В Visual Studio 2019 версии 16.5 и последующих отладчик debugpy является частью рабочей нагрузки Visual Studio Python и обновляется вместе с Visual Studio.
Включение ведения журнала отладчика
В ходе исследования проблемы с отладчиком сотрудники Майкрософт могут попросить вас включить и собрать журналы отладчика, которые помогут при диагностике.
Следующие шаги позволяют включить отладку в текущем сеансе Visual Studio.
- Откройте командное окно в Visual Studio с помощью команды меню Вид>Other Windows (Другие окна)>Command Window (Окно команд).
- Введите следующую команду:
DebugAdapterHost.Logging /On /OutputWindow

DebugAdapterHost.Logging /On
Связанный контент
Дополнительные сведения об отладчике Visual Studio см. в статье Debugging in Visual Studio (Отладка в Visual Studio).