Как очистить окно вывода в pascal abc
Урок 2. Очистка экрана, проблема с кириллицей и др.
В прошлый раз мы написали программу, которая здоровается с вами, выводя на экран приветственное сообщение «Привет!». Однако переключаясь в окно, где выводятся результаты выполнения программы, мы видели не только сообщение «Привет!», но и целый ряд служебных сообщений, которые Free Pascal выводит во время своего запуска.
Хотелось бы, чтобы наша программа перед выводом каких-либо сообщений очищала экран. Как это сделать? Очень просто: нужно добавить в программу вызов команды (процедуры) ClrScr (сокращение от английского «clear screen» — «очистить экран»).
Если ваша предыдущая программа hello.pas закрыта, то откройте её, нажав клавишу F3 (File | Open). Напоминаю, что все наши программы мы сохраняем в папке «C:\FPC\3.0.0\work».
Чтобы не затереть файл hello.pas нашими модификациями, сохраним открытый файл hello.pas под другим именем. Откройте меню «File» (Alt + F) и нажмите «Save as. ». В поле «Name» напечатайте helloClr.pas ( Clr — сокр. от «clear» — очищать) и нажмите «OK», чтобы сохранить программу под новым именем. После этого модифицируйте текст программы так, чтобы он соответствовал нижеприведенному варианту:
Запустите программу, нажав Ctrl + F9.

Упс! Программа не запускается. Что говорит компилятор? (Напомню, что компилятор — Free Pascal — переводит нашу программу с языка Паскаль в машинные инструкции, понятные компьютеру). Компилятор сообщает, что у нас 3 ошибки. Одна с пометкой Error и две с пометкой Fatal. Но мы, глядя на текст сообщений, уже видим, что ошибка на самом деле ровно одна — Error: Identifier not found «ClrScr» — Ошибка: идентификатор «ClrScr» не найден.
Идентификатор — это имя. Компилятор не понимает, что такое ClrScr . Вспомним, в прошлый раз подобная ошибка у нас была, когда мы пропустили букву « e» в слове Writeln . Компилятор не знал, что такое Writln и из-за этого ругался. Может быть, мы допустили ошибку в названии процедуры (команды) ClrScr ? Смотрим внимательно. Нет ошибок? И тем не менее компилятор не понимает, что такое ClrScr .
Да, так и есть. Компилятор не знает, что такое ClrScr .
Но почему тогда он знает Writeln и не знает ClrScr ? Дело в том, что процедура (команда) Writeln относится к базовым процедурам Паскаля, а вот алгоритм работы процедуры ClrScr описан отдельно. Отдельно — означает в отдельном модуле (файле). И для того, чтобы компилятор Free Pascal знал, как работает эта процедура, вы должны указать в своей программе, что используете модуль Crt . Так называется модуль, в котором описан алгоритм процедуры ClrScr . Или как еще говорят: реализована процедура ClrScr .
Добавим к нашей программе недостающую строку « uses Crt; »:
Uses — по-английски означает «использует». Модуль Crt — тот самый модуль, в котором реализована процедура ClrScr .
Теперь мы можем запустить нашу программу (Ctrl + F9):

Что ж, на этот раз наша программа запустилась, и даже очистился экран, вот только вместо « Привет! » мы видим на экране какую-то белиберду. Т. е. Free Pascal не отображает русские буквы (кириллицу), если подключен модуль Crt и используется процедура ClrScr (эксперимент показывает, что даже если удалить строку с вызовом процедуры ClrScr , проблема с отображением кириллицы все равно остается).
Открываем браузер, и в поисковой строке гугла вбиваем «free pascal clrscr не отображает русские буквы»:

Первая же ссылка приводит нас на форум, где мы находим решение:

Чтобы исправить проблему с отображением русских букв (кириллицы), сохраняем нашу программу (F2 — File | Save), закрываем Free Pascal (Alt + X — File | Exit), и щелкаем правой кнопкой мыши на ярлыке запуска Free Pascal, расположенном на нашем Рабочем столе.

Открываем пункт «Свойства» и переходим на закладку «Шрифт».

Возвращаем «Точечные шрифты», размер выставляем «10 x 18». Нажимаем «ОК».
И снова запускаем Free Pascal:
![]()
Как видите, вид окна поменялся.
Запускаем нашу программу (Ctrl + F9), нажимаем Alt + F5, чтобы переключиться в окно результатов работы программы, и видим результат:

Экран очищен, на экран выведено сообщение « Привет! ».
Краткое содержание урока
✔ Мы узнали как правильно закрывать Free Pascal (раньше вы, скорее всего, просто нажимали на крестик в правом верхнем углу окна):
- Alt + X (File | Exit) — закрыть Free Pascal.
✔ Дополнили нашу программу «Привет!» очисткой экрана:
✔ Узнали новое ключевое слово языка Паскаль:
- uses — ключевое слово, после которого перечисляются все модули, используемые нами в программе.
✔ Познакомились с еще одной процедурой:
- ClrScr — очищает экран от текста.
✔ Узнали о существовании модуля Crt .
✔ И наконец, мы впервые столкнулись с проблемой на уровне инструмента (Free Pascal): когда после подключения модуля Crt у нас перестали отображаться русские буквы (кириллица) в окне результатов. Мы не разобрались, почему это происходит, т. к. причины скрыты внутри модуля Crt . Можно ли выяснить причины, по которым у нас возникла проблема с кириллицей? Чисто теоретически, да. Но для этого нам бы понадобились знания, которые выходят за рамки наших уроков. Поэтому мы воспользовались обходным решением (workaround) — поменяли используемый в программе шрифт Lucida Console на точечный шрифт.
И вот здесь я хочу остановиться подробнее
При реализации нашей программы у нас возникла проблема с кириллицей, которую мы решили. Казалось бы — вопрос снят: экран очищается, сообщение отображается. Но обратите внимание, что мы отказались от использования шрифта Lucida Console, который смотрится гораздо опрятнее точечного шрифта. Т. е. наше решение (или правильнее, обходное решение) далеко от идеального.
Приведу аналогию. Представьте себе, что вы — работник дорожной службы, которому поручили на такой-то улице нарисовать «зебру» и поставить соответствующие знаки пешеходного перехода. Вы приехали на заданную улицу и обнаружили, что в том месте, где вам надо рисовать «зебру», из-под асфальта бьет фонтан воды, и образовалась лужа. Какие у вас есть варианты действий:
- Выяснить откуда вода (скорее всего, прорвало трубу), устранить течь, высушить лужу и уже после этого рисовать «зебру».
- Нарисовать «зебру» 50 метрами ниже (или выше) — там, где нет воды, и где дорожные условия позволяют это сделать.
Так вот, второй вариант — это и есть обходное решение (workaround). Оно может иметь серьезные недостатки. Например, школа находится именно там, где и надо было изначально рисовать «зебру», и если вы нарисуете её ниже (выше), то далеко не все школьники дойдут до этой зебры, а значит, на изначальном участке дороги будет повышенная аварийность из-за школьников, перебегающих дорогу в неположенном месте.
А что нужно, чтобы пойти по пути первого варианта? Другие компетенции. Если вы не владеете нужными навыками (и инструментами) — у вас нет экскаватора, чтобы добраться до трубопровода, сварочного аппарата и т. д. — то вам нужно ждать, когда другие люди решат возникшую проблему, прежде чем вы сможете нарисовать «зебру» именно там, где вам надо. В нашем примере это означает, что вы должны написать письмо разработчикам Free Pascal, описать возникшую проблему (некорректное отображение кириллицы после подключения модуля Crt ), и ждать, когда разработчики устранят эту ошибку в модуле Crt. На всё это может уйти неопределенное время. Или разработчикам Free Pascal будет вообще не до этой проблемы, и ваша «лужа» так никуда и не денется.
Другой сценарий: обладая нужными навыками, устранить самому эту проблему в модуле Crt. А для этого нужно знать, что такое дизассемблирование, обратная разработка (reverse engineering) и т. д.
Идеальный вариант — это, конечно, когда лужу устраняют те, кто за нее отвечают. Т. е. разработчики Free Pascal. Но мы живем не в идеальном мире, и поэтому нам иногда приходится использовать обходные решения.
И последнее: когда ваши программы перестанут вмещаться на одну страницу экрана, и будут занимать сотни, а то и больше, страниц, у вас могут тоже возникать подобные ситуации. Когда что-то идет не так и нужно найти причины проблемы, а потом её решение. И вот тут может возникнуть соблазн «передвинуть «зебру» на 50 метров выше или ниже» (использовать обходное решение) вместо того, чтобы разбираться, почему возникла проблема и как её устранить. В случае, когда речь идет о вашей зоне ответственности, такой подход, в целом, недопустим (!). Вы должны всегда понимать, что и почему происходит в вашей программе. Если оказывается, что программа ведет себя не так, как вы это задумывали, надо разбираться, почему она себя так ведет (откуда лужа?), а не цепляться за первое попавшееся решение, которое вроде бы «решает» вашу проблему.
Задания
- Что будет выведено на экране после запуска следующей программы?
- А после запуска такой программы?
- Исправьте все ошибки в следующей программе, и запустите исправленный вариант:
«illegal character» переводится как «некорректный символ».
Задания повышенной сложности
- Напишите программу, которая выведет на чистый экран текст программы hello.pas (см. урок 1).
1) чтобы вывести на экран пустую строку, используйте команду « Writeln; » (без скобок и одинарных кавычек);
2) для отступов используйте по 3 пробела;
3) чтобы вывести одинарные кавычки на экран, используйте по 2 одинарных кавычки, например: « Writeln( »’Привет»’ ); » напечатает на экране не просто Привет , а ‘Привет’ .
Непонятно почему в скобках по 3 кавычки? Смотрите: самая левая и самая правая одинарные кавычки обрамляют тот текст, который мы хотим вывести на экран, например:
Writeln( ‘Кафе Огонёк’ );
А что делать, если нам нужно в сообщении вывести одинарные кавычки? Ведь они задействованы в качестве служебных символов, по которым Free Pascal определяет, где наша строка в программе начинается, а где заканчивается. Вот поэтому Free Pascal говорит: хочешь вывести в своей строке одну одинарную кавычку, поставь их две (!) друг за дружкой, и я буду знать, что это не конец строки, а всего лишь обычная одинарная кавычка, которую ты хочешь напечатать.
Язык паскаль онлайн

Для выполнения различных задач в паскале нам понадобится выводить определенную информацию на экран.
Информация , которую мы будем выводить может быть абсолютно разной. Она может быть текстом , переменной и даже выражением вроде ( a + b ).
В языке программирования паскаль предусмотрен тот случай , когда нам нужно вывести на экран какую либо информацию , например результат работы программы или значение какой-либо переменной. Вывод в паскале можно осуществить за счет двух операторов вывода : write и writeln , прочитать о которых вы можете ниже.
Writeln
Первый оператор вывода — это writeln ( write — писать , ln — сокр. линия ). Благодаря нему и осуществляется вывод информации на экран. Давайте разберем это на примере :
Допустим , мы хотим вывести приветствие на экран в формате «Привет друг !» Код такой программы выглядит так :
Давайте разберем данную программу. После выполнения кода , на экран будет выведено сообщение — «Привет друг !» как раз то , что мы хотели.
Оператор вывода writeln выводит то , что находится в круглых скобках и одинарных кавычках. Запомните ! Чтобы выводить текст на экран , его следует заключать в кавычки.
Для вывода чисел на экран можно пользоваться кавычками , а можно и не пользоваться.

В обоих случаях на экран будет выведено число 17 , поэтому можно утверждать , что вывод чисел на экран не зависит от кавычек.
А теперь о том , почему нельзя выводить тест на экран без кавычек. Почему нельзя выводить текст на экран в паскале без кавычек ? Это сделано специально для того , чтобы программа могла различать текст от переменной.
Если вы имеете познания в языке паскаль , то наверняка понимаете что такое переменные , если нет , то вам сюда .
Если в операторе вывода writeln() в круглых скобках будет стоять слово hello без кавычек , то программа выведет на экран значение переменной hello ( если она существует ).
Но иногда нам нужно вывести на экран и текст и переменную. Чтобы вывести на экран сообщение — «Привет Марина !» , где текст «Марина» содержится в переменной Name ( имя ) , нам потребуется изменить оператор writeln() так :
Очищение области вывода
Где логическая область вывода в клиентской области?
Где находится в данном примере логическая область вывода в клиентской области? #undef UNICODE.

Области видимости переменных\или проблема вывода из БД
Доброго времени суток, господа, я не такой уж сильный знаток PHP по этому возникла проблема: есть.
Программа вывода в одной строке области просмотра определенные данные
Здравствуйте, необходимо написать программу в NetBeans, с помощью которой пользователь вводит.
Как организовать PrintScreen области формы для вывода на печать
В общем вот такая конитель,есть две формы, на одной вводим данные и они пересылаются на вторую.
Нарисовать наибольший равносторонний треугольник, который поместится в области вывода
Нарисовать наибольший равносторонний треугольник, который поместится в области вывода. Одна из.
Изменение размеров рисунка при изменении размеров области вывода (окна)
Нужно сделать так, что бы рисунок менял свой размер при изменении окна. unit Unit1; interface .
Очищение потока в с++
Добрый день. составляю программу в с++, использую getline для считывания строки. Но видимо у меня.
Очищение таблицы
что-то я сегодня туплю, кто-нибудь может помочь, чистит всю таблицу кроме последней оставшейся.
Очищение combobox
Добрый день, имеется форма, при нажатии на кнопку редактировать поступают данные из БД в форму, в.
Очищение DBLookupComboBox
Всем привет) Не могу додуматься как очистить DBLookupComboBox Пробовал вот так.
Как очистить окно вывода в pascal abc
Очистить вывод в окне graphabc

Можно ли определить, находится ли курсор в окне GraphABC в PascalABC.net?
Хотел написать следующее за курсором окно, но столкнулся с такой проблемой-как определить.
Урок 8. Язык программирования Pascal ABC. Структура окна

Для очистки окна вывода следует нажать комбинацию клавиш Ctrl-Del или кнопку .
Для запуска программы в текущем окне редактора следует нажать клавишу F9 или кнопку панели инструментов.
Выполнение программы можно в любой момент прервать нажатием комбинации клавиш Ctrl-F2 или кнопки При этом в окне вывода появится сообщение: • Программа прервана пользователем.
Pascal: Проверь себя (решенные задачи, операторы цикла)
var a, b, temp, c: integer; flag: boolean; begin writeln(‘A=’); readln(a); writeln(‘B=’); readln(b); assert(a>b,’введите a > b’); temp := a; c := 0; repeat temp := temp — b; inc(c); until temp — b < 0; writeln(‘result: ‘, c); end.
Pascal операторы цикла — While
S:=0; i:=7; while i > 1 do begin S := S + i div 2; i := i — 1; end;
var number:integer; flag: boolean; begin writeln(‘введите целое число (number>0) number=’); readln(number); flag:=false; while (number div 10)>0 do begin if (number mod 10) = 2 then flag:=true; number:=number div 10; end; writeln(flag); end.
var N,K,Temp :Integer; begin Write(‘Введите N: ‘); Readln(N); K:=0; Temp:=3; while Temp
Pascal операторы цикла — For
var c,m:real; i:integer; begin writeln(‘Цена?’); readln(c); m:=0.1; for i := 1 to 10 do begin writeln(‘ price of ‘,m, ‘ kg = ‘,c*m); m:=m+0.1; end; end.
var a, b, i: integer; begin writeln(‘A:’); readln(a); writeln(‘B:’); readln(b); for i:= b-1 downto a+1 do write(i:3 ); writeln; writeln(‘kolvo: ‘,b-a-1); end.
![]()
var N, Rez,i :Integer; begin Write(‘Введите N: ‘); Readln(N); rez:=0; For i:=0 to N do Rez:=Rez+sqr(N+i); Writeln(Rez); end.
var c,n,s,k,i:integer; begin c:=0; s:=0; readln(n); for i:=2 to n do begin k:=i; while k>0 do begin if i mod k = 0 then c:=c+1; k:=k-1; end; if c= 5 then s:=s+i; c:=0; end; writeln(s); end.
Похожие публикации:
- Как обнулить millis arduino
- Как обращаться к классу css
- Почему вместо круга квадрат css
- Почему появляется горизонтальный скролл css
Очистить вывод в окне graphabc — Pascal ABC
Салют народ! Вот сел за лабораторную работу и сходу не получается. Замутил простенькую менюшку бесконечным циклом и мне нужно перерисовывать текст каждый раз, когда я что-то выбираю в меню. Чтобы не получилось как на первом скриншоте. Я сделал clearwindow — результат на втором скрине.
Код к задаче: «Очистить вывод в окне graphabc»
Листинг программы
Program Graphik ; Uses Graph , Crt ; Type Mas1=array[1..50] of Real ; Mas2=array[1..50] of String[ 150 ] ; Const Z1=20; mas : array[1..8] of string = ('Dub','Bereza','Iva','Topol','Yasen','Lipa','Sosna','Klen'); Var Y:MAS2; Driver , Mode : Integer ; Z: array[ 1..Z1 ] of Integer ; T , l : String[ 150 ] ; A , f: array[ 1..Z1 ] of real; Max , Sum : Real ; Y0 , Y1 , Y2 , H , PR , X , RX ,Osn , Ras , i , N , Y3 , Y4 :Integer ; Procedure Sect ; Begin ClearDevice ; OutTextXY( 100 , 30 , 'Krugovaya diagramma znacheniy' ) ; Sum := 0 ; For i := 1 to N do Sum := Sum + A[ i ] ; For i:=1 to N do f[ i ] := ( A[ i ]*100/sum ) ; For i:=1 to N do Z[ i ] := Round( A[ i ]*360/Sum ) ; Y0 := 0 ; For i := 1 to N do begin SetFillStyle( 2 , i + 1 ) ; PiesLice( 325 , 190 , Y0 , Y0 + Z[ i ] , 140 ) ; Y0 := Y0 + Z[ i ] ; end ; Y1 := 50 ; Y2 := 70 ; Y3 :=500 ; Y4 :=540 ; For i:=1 to N do begin SetFillStyle( 2 , i + 1 ) ; Bar3d( 20 , Y1 , 60 , Y2 , 5 , True ) ; Str( A[ i ] : 6 : 1 , T ) ; OutTextXY( 70 , Y1 + 10 , T ) ; Str( f[ i ] : 6 : 2 , l ); OutTextXY( 120 , Y1 + 10 , '-' + l + '%'); Y1 := Y1 + 30 ; Y2 := Y2 + 30 ; SetFillStyle( 2 , i + 1 ) ; Bar3d( Y3 , Y1 , Y4 , Y2 , 5 , True ) ; Str( A[ i ] : 6 : 1 , T ) ; OutTextXY( Y4+10 , Y1 + 10 , Y[i]) ; end ; ReadLn ; End; Procedure Stol ; Begin ClearDevice ; OuttextXY( 100 , 30 ,'Sootnoshenie rosta' ) ; X := 50 ; RX := 30 ; RAS := Round( 400 / n ) ; OSN := 280 ; SetFillStyle( 3 , 1 ) ; Bar3d( X , OSN , X + RAS*( N - 1 ) + RX , OSN + 35 , 10 , True ) ; SetTextStyle( 4 , 0 , 2 ) ; PR := 0 ; < OutTextXY( 100 , 20 , ' ' ) ;>Max := A[ 1 ] ; For i := 1 to N do If A[ i ] > max then max := A[ i ] ; sum := 0 ; For i := 1 to N do Sum := Sum + A[ i ] ; For i := 1 to N do f[ i ] := A[ i ]*100/Sum ; For i := 1 to N do begin OutTextXY( X + 2 , osn + 5 , Y[ i ] ) ; H := Trunc( A[ i ]*200/max ) ; SetFillStyle( 9 , i + 11 ) ; Bar3d( X , 280 - H , X + RX , OSN , 10 , Topon ) ; Str( a[ i ] : 6 : 1 , t ) ; OutTextXY( X , 280 - H - 33 , T ) ; SetTextstyle( 4 , 0 , 1 ) ; Str( f[ i ] : 6 : 2 , l ) ; OutTextXy( X - 10 , 280 - H - 20 , l + '%' ) ; X := X + RAS ; end ; ReadLn ; End ; Begin ClrScr ; Write( ' Введите число сравниваеммых элеметов:':30 ) ; Readln( N ) ; Writeln( 'Введите высоты деревьев':30 ) ; For i := 1 to N do begin Write ( mas[i], '=' ) ; Readln( A[ i ] ) ; end ; readln; < For i := 1 to N do begin Writeln; Write( ' ' , i ,')',Y[i], '='); Readln(A[i]); end; readln;>Driver := Detect ; InitGraph( Driver , Mode ,'' ) ; Stol ; Sect ; CloseGraph ; End.
Помогите с PascalABC Какая команда нужна для очищения экрана cls и ClrScr не помогают .
ClrScr — процедура очистки консоли (то что вы называете экраном) и в PascalABC, и в PascalABC.NET, и в Turbo/Borland Pascal, и в Free Pascal.
Greenfire VipestЗнаток (365) 4 года назад
Остальные ответы
Напишите, что конкретно не работает. У меня в PascalABC работает команда clrscr();
Namer ProЗнаток (291) 7 лет назад
Тут ясен пень! Uses CRT надо написать после Program.
//Пример программы (Пишет текст, ждет 5 секунд и чистить экран):
Uses CRT;
Begin
Writeln(‘Привет, добавь меня в лучший ответ! ‘);
Sleep(5000);
ClrScr;
Readln;
End.
а как очистить экран в PascalABC.NET без подключения Uses crt? Не хочу запускать программу через Shift+F9. В программе пользователь вводит значения и выполняются вычисления по ходу. далее он опять вводит значения, скапливается много строк и потом пользователь вводит не верное значение, В результате экран должен очиститься и пользователь должен ввести значения заново.
Отладка кода 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).
