Откровенно говоря, программа GNU GDB довольно многофункциональная. Пошаговая отладка — лишь одна из ее возможностей. В этой статье я попытался описать те лишь команды GDB, которые позволяют проводить удобную пошаговую отладку программ, написанных на Free Pascal.
Чтобы программу можно было отлаживать, она должна быть откомпилирована с ключом -g .
Поскольку GDB ориентирован не на Pascal, а на C и C++, то использование GDB для отладки Pascal-программ иногда сопряжено с неудобствами.
Приведу список подводных камней, обнаруженных мною и разработчиками Free Pascal (перечисленных в user’s manual).
- Отладочная информация в Free Pascal генерируется в верхнем регистре. Поэтому имена всех переменных, процедур, функций при использовании GDB должны указываться БОЛЬШИМИ БУКВАМИ.
- GDB не воспринимает тип extended (ведь в C такого типа нет). Обойти эту неприятность можно, если, например, включить в код такие строки
.
type
Вложенные циклы в Паскале — как это работает, отладка программы
dbl = double;
dbl = extended;
.
var x : dbl;
.
(gdb) print A[1,1]
выдаст первую строку массива A. Для просмотра требуемого элемента следует писать
(gdb) print A[1][1]
Все примеры отлаживались с использованием GNU GDB 5.0.
Запуск отладчика GDB
gdb [опции] [имя_файла | ID процесса]
После запуска видим «nice GDB logo» (если это почему-то раздражает, то опция -q позволяет не выводить это введение с информацией об авторских правах и прочая). В следующей строке приглашение
(gdb)
ждет ввода команды.
Ниже приводится краткий перечень команд GDB.
Краткую справку о любой команде можно получить, введя
(gdb) help [имя_команды, можно краткое]
Если при запуске GDB имя исполняемого файла не было указано (что следовало бы делать), то указать его можно командой file .
Команда file
Для того, чтобы пролистать содержимое исходника, используйте команду list (сокращенно l ; большая часть наиболее полезных команд имеют сокращения). При этом подразумевается, что исходник расположен в том же каталоге, что и исполняемый файл. Как правило, так оно и есть.
Команда list (сокращенно l )
Пролистывает 10 строк вниз, начиная с текущей. Для пролистывания вверх следует набрать
Команда run (сокращенно r )
Запускает отлаживаемую программу под GDB. Если требуется, то после команды можно указать список аргументов программы. Также допускается перенаправление потоков ввода и вывода в другие файлы, например
(gdb) run > outfile
Если никаких точек останова не определено, то программа выполняется тихо, при этом нам сообщается:
(gdb) run
Starting program: test
Program exited normally.
(gdb)
Если же отладчик встречает точку останова, он выдает ее номер, адрес и дополнительную информацию — текущую строку, имя процедуры, и т.п.
(gdb) r
Breakpoint 1, main () at test.pp:3
Current language: auto; currently pascal
Паскаль урок 5: отладка программы
3 x := x + 1;
(gdb)
И ожидает ввода команды.
Остановка отладки программы
Команда kill ( k ). Следует запрос
(gdb) kill
Kill the program being debugged? (y or n) y
(gdb)
Здесь введено y (то есть «да»), и отладка программы прекращается. Командой run ее можно начать заново, при этом все точки останова (breakpoints), точки просмотра (watchpoints) и точки отлова (catchpoints) сохраняются.
Выход из отладчика
Команда quit ( q ).
Точки останова
Информацию о командах этого раздела можно получить, введя
(gdb) help breakpoints
Точки останова — такие, когда GDB приостанавливает выполнение программы. Как уже упоминалось, имеется 3 типа точек останова:
- Breakpoints — точка останова как таковая. Остановка происходит, когда выполнение доходит до определенной строки, адреса или процедуры/функции.
- Watchpoints — точка просмотра. Выполнение программы приостанавливается, если программа обратилась к определенной переменной — либо считала ее значение, либо изменила его.
- Catchpoints — точка отлова. Приостановка происходит при определенном событии (например, получение сигнала). Я не буду касаться точек останова этого типа.
Определение точек останова
Breakpoint
Команда break
(gdb) break [аргумент]
или, сокращенно
(gdb) b [аргумент]
определяет точку останова. В качестве аргумента может выступать
-
номер строки. Остановка произойдет при достижении строки программы с этим номером. То, что написано в самой строке, выполняться не будет. Например
(gdb) b 394 Breakpoint 1 at 0x805a650: file maeq.pas, line 394.
(gdb) b CALC Breakpoint 2 at 0x7657c7a: file maeq.pas, line 26.
(gdb) b *0x805a650 Breakpoint 3 at 0x805a650: file maeq.pas, line 394.
Допускается использование нескольких точек останова на одной строке (функции, адресе).
Watchpoint
Существуют различные виды точек просмотра, и задаются они различными командами:
-
команда watch (сокращенно wa )
(gdb) wa
(gdb) rw
(gdb) aw
Замечу от себя, что команды rwatch и awatch у меня почему-то капризничают — часто не устанавливают точки просмотра на переменную. Зато команда watch работала всегда.
Управление точками останова
Информацию о всех установленных точках останова можно вывести командой info .
Команда info имеет много возможностей, но в данном случае воспользуемся лишь следующим ее форматом:
(gdb) info breakpoints
или, кратко
(gdb) i b
Выводится подробная информация о всех точках останова (как breakpoints, так и watchpoints), включающая — номер — breakpoint или watchpoint — активность — сколько раз программа натыкалась на эту точку — иные характеристики, значение которых мне не совсем понятно
Если какая-то точка останова не нужна, то ее можно сделать неактивной с помощью команды disable :
(gdb) disable breakpoint
Обратно, деактивированная точка останова активируется командой enable :
(gdb) enable breakpoint
Статус точки останова — активна она или нет, легко обозреть той же командой info .
Если же точка останова не требуется вообще, то она может быть удалена насовсем.
(gdb) delete breakpoint [номер точки]
(gdb) d b [номер точки]
Ввод этой команды без аргумента удалит ВСЕ точки останова.
Возобновление выполнения, пошаговая отладка
Информацию о командах этого раздела можно получить, введя
(gdb) help running
Команда continue ( c )
(gdb) с [аргумент]
Продолжает выполнение остановленной программы. Выполнение будет происходить, пока снова не встретится точка останова.
В качестве аргумента может использоваться целое число N. Это укажет отладчику проигнорировать (N-1) точку останова (выполнение остановится на N-ой).
Команда step ( s )
(gdb) s [аргумент]
Аналог действия клавиши F7 (Trace into) в IDE. Происходит выполнение программы до тех пор, пока не будет достигнута следующая строка ее кода. При указании аргумента — целого числа N, отладчик выполняет команду step N раз (если не останавливает выполнение из-за точек останова или по иным причинам).
Команда next ( n )
(gdb) n [аргумент]
Аналог действия клавиши F8 (Step over) в IDE. В отличие от step вызов процедуры считается единой инструкцией (не заходит в вызываемые процедуры, функции). Аргумент N работает так же, как и для step .
Команда finish ( fin )
(gdb) fin
Выполняет программу до момента выхода из текущей процедуры (функции). Если функция возвращает значение, то это значение выводится тоже.
Команда until ( u )
Производит выполнение программы до тех пор, пока не будет достигнута строка с номером, большим текущего. Команду until удобно применять при отладке циклов. Остановка произойдет также, если программа при выполнении цикла выйдет из текущей процедуры, функции.
Команда stepi ( si )
(gdb) si [аргумент]
Действие подобно step , но выполняется не строка, а ровно одна инструкция в этой строке программы. Аргумент N нужен, если требуется выполнить N инструкций.
Команда nexti ( ni )
(gdb) ni [аргумент]
Аналогична stepi , но вызовы процедур трактуются как одна инструкция.
Управление состоянием (просмотр, изменение) переменных при отладке
Информацию о командах этого раздела можно получить, введя
(gdb) help data
Команда print ( p )
(gdb) print
Вывод текущего значения переменной (выражения). При использовании команды print имя переменной можно писать в смешанном регистре, то есть в этом случае использование больших букв обязательным не является.
Часто требуется отслеживать значения нескольких переменных. Чтобы не утруждать себя многократным вводом команды print , используйте команду display .
Команда display
(gdb) display [аргумент]
В качестве аргумента обычно указывают переменную или выражение. При этом указанная переменная (выражение) занесется в дисплей, то есть станет выводиться при каждой остановке программы (при попадании на точку останова, при пошаговом выполнении командами step и next , etc). Если вызвать display без аргументов, то GDB выдаст значения всех переменных (выражений), занесенных в дисплей.
Управление списком этих переменных осуществляется аналогично точкам останова. А именно, команда info display
(gdb) info display
выдаст все переменные, занесенные в дисплей. Любая переменная в списке дисплея может быть дезактивирована
(gdb) disable display
или активирована заново
(gdb) enable display
Удаление переменной из списка дисплея производится командой delete или командой undisplay . Так, команда
(gdb) delete display [номер переменной в списке дисплея]
делает то же, что и
(gdb) undisplay [номер переменной в списке дисплея]
Опять-таки, если не указать номер переменной, то очистится весь список отображаемых переменных.
Изменение значения переменной
И последнее. Изменение значения переменной на другое можно, например, произвести с помощью команд set или print .
(gdb) set
(gdb) print
(gdb) whatis x
TYPE = WORD
(gdb) p x
$1 = 1
(gdb) set x:=2
(gdb)
При использовании set присваивание происходит «тихо». То же самое можно сделать, но с помощью команды print .
(gdb) p x
$2 = 2
(gdb) p x:=x-2
$3 = 0
(gdb)
При этом, как видно, выводится новое значение переменной.
Удачной отладки!
Источник: www.freepascal.ru
Отладка программы в паскале это
Для ошибок первого типа все эти три этапа выполняются довольно просто с помощью компилятора среды, который выдает сообщение о любой обнаруженной ошибке этого типа, а курсор указывает место в тексте программы, где эта ошибка обнаружена. При этом если сообщение об ошибке, которое является довольно лаконичным, не позволяет выявить ее природу, можно воспользоваться системой информационной контекстной помощи.
Наиболее сложно выявляются ошибки второго и особенно третьего типа. Выявлению ошибок второго типа часто помогает использование ключей компилятора (см. п. 17.7), позволяющих проверять допустимые значения тех или иных параметров (границы индексов элементов массивов, границы типа-диапазона, переполнение стека, ошибки ввода-вывода и т. д.). Ключи задаются либо в программе, либо с помощью меню Options (см. п. 17.5.8).
- получать значения любых параметров программы;
- модифицировать значения параметров;
- останавливать программу в заданной точке останова или в месте, соответствующем строке текста, где расположен курсор;
- осуществлять трассировку программы (выполнение программы по шагам) и т. д.
Для этой цели можно использовать меню Debug (см. п. 17.5.6) и Run (см. п. 17.5.4) или соответствующие клавиши быстрого управления. Для того чтобы отладчик работал, должны быть установлены ключи компилятора (см. п. 17.7.1), которые выбираются по умолчанию.
17.8.1. Получение значений параметров, модификация параметров
Для получения значений тех или иных параметров имеется ряд возможностей. Самый простой способ — запрограммировать получение значения того или иного параметра непосредственно в программе, используя операторы Write или WriteLn (т. н. отладочная печать).
Для того чтобы содержимое экрана пользователя не было сразу же заменено тем или иным экраном среды, можно сразу же после такого оператора поставить оператор ReadLn, с тем чтобы программа остановилась до момента нажатия клавиши Enter. Вместо этого оператора можно использовать соответствующие процедуры и функции стандартного модуля Crt. Если же эти меры не предприняты и тем не менее необходимо посмотреть значения выводимых параметров, можно воспользоваться командой меню Debug | User screen (см. п. 17.5.6) или клавишами быстрого управления Alt+F5. Этим методом следует пользоваться в тех случаях, когда выводимые параметры необходимы не только для отладки, но и сами по себе (например, являются выходными параметрами программы), т. к. есть и другие простые способы получения значений параметров программы без искажения ее текста.
Те или иные параметры можно постоянно контролировать, используя окно отладки (см. п. 17.3.3). В это окно с помощью команд подменю Debug|Watch (см. п. 17.5.6) можно поместить контролируемый параметр, удалить параметр, отредактировать его, удалить все параметры. При задании параметра можно после его имени через запятую указать число выводимых параметров и формат представления данных. Возможные форматы приведены в табл. 44.
Таблица 44. Форматы представления данных
Пример. Имеется типизированная константа
const A: array[1..5] of Byte = (20,41,22,43,44);
Использование различных форматов даст следующие результаты:
А (20,41,22,43,44)
А[1] 20
А[1],3 20,41,22
А[1],М 14
А,М 14,29,16,2В,2С
A,3MD 20,41,22
А,ЗМ$ $14,$29,$16
А[1],ЗМС p ‘)’
A[1],3MS #20′)’#22
Эти же операции можно выполнить и непосредственно из окна отладки, подведя курсор «мыши» к строке с параметром, который следует отредактировать, добавить или удалить, и дважды нажать левую клавишу «мыши». Будет открыто окно, в котором можно отредактировать требуемый параметр. Открыть окно для редактирования параметра можно также с помощью клавиши Enter или Insert.
В течение работы программы параметры, находящиеся в окне, будут вычисляться при каждой приостановке ее работы. Следует иметь в виду, что если несколько параметров программы имеют одно и то же имя, например глобальный параметр программы и локальный параметр подпрограммы, то в окне будет показано зна- чение того параметра, с которым в данный момент происходит работа. Так если выполняется подпрограмма, то будет показано значение ее локально^ параметра, в остальных случаях — значение глобального параметра. Если тот или иной параметр не определен, например локальный параметр подпрограммы вне этой подпрограммы или вообще задан несуществующий параметр, будет выдано соответствующее сообщение (Unknown identifier — неизвестный идентификатор)
Для получения значения того или иного выражения можно также использовать команду меню Debug | Evaluate/Modify. По этой команде выводится окно диалога (см. п. 17.3.2), с помощью которого можно задать выражение, значение которого тут же вычисляется. Более того, можно модифицировать интересующий параметр (например, изменить значение параметра цикла). В отличие от предыдущего способа получения значений параметров в данном случае параметр вычисляется только один раз.
17.8.2. Приостановка работы программы
Вторая задача, которую приходится решать во время отладки программы, -это приостановка ее работы в той или иной точке. Приостановка может потребоваться, во-первых, для того, чтобы посмотреть значения тех или ины* параметров, а может быть, и модифицировать их, во-вторых, для того, чтобы далее выполнять программу по отдельным операторам или группам операторов. Остановить выполнение программы можно несколькими способами.
Можно задать точки останова в программе. Для этого следует поместить курсор на той строке, где следует остановить программу, и выполнить команду локального меню Toggle breakpoint (см. п. 17.5.11). Количество точек останова может быть любым. После запуска программы командой Run | Run (см. п. 17.5.4) вычислительный процесс приостановится на первой встреченной точке останова.
Продолжение работы осуществляется повторным запуском программы командой Run | Run (при этом программа запустится не с начала, а от точки останова) либо одной из команд меню Run: Run | Step over, Run | Trace into или Run | Go to cursor (см. п. 17.5.4). Если перед очередным запуском были произведены изменения в тексте программы, на экран выдается запрос, следует ли перекомпилировать программу. При утвердительном ответе программа перекомпилируется с учетом внесенных изменений и запускается с начала, в противном случае все Изменения в тексте игнорируются. Если станет очевидным, что дальнейшая отладка программы бессмысленна, можно выйти из отладчика, выполнив команду Run | Program reset (см. п. 17.5.4). Эту же команду следует выполнить, если необходимо запустить программу с начала.
Так осуществляется работа программы при задании абсолютных точек останова, когда при попадании на помеченный участок программы в любом случае происходит ее останов. Однако можно задать и точку останова, в которой вычислительный процесс остановится при выполнении определенного условия (см. например, рис. 7). Эти условия могут быть двоякого вида.
Во-первых, можно просто задать условие, при выполнении которого происходит останов, в противном же случае точка останова пропускается. Во-вторых, можно задать Номер попадания в точку останова, при котором действительно произойдет останов.
Например, если точка останова задана в теле цикла FOR и номер попадания задан равным максимальному значению параметра цикла (если он изменяется от единицы), то останов произойдет только при последней итерации. Задать такие точки останова можно, используя окно точек останова с помощью режима Edit. В качестве условия останова может быть использовано выражение логического типа, которое задается точно так же, как и обычное выражение языка Паскаль. Номер попадания задается числом в пределах от 0 до 32767.
Другой способ остановить в какой-то точке выполнение программы — установить в эту точку курсор и вместо команды Run | Run использовать команду Run Go to cursor. Вычислительный процесс остановится в месте расположения курсора. Продолжение работы программы можно осуществить, как и в предыдущем случае, одной из команд меню Run: Run | Run, Run | Go to cursor, Run | Trace into или Run | Step over.
Еще два способа останова программы — запуск ее одной из команд Run | Step over или Run | Trace into. При этом выполняется оператор или группа операторов, соответствующих одной строке текста программы. Эти две команды отличаются друг от друга только тем, что, если встречается подпрограмма, в случае команды Run | Trace into происходит трассировка (построчное выполнение) этой подпрограммы, а в случае команды Run | Step over подпрограмма рассматривается как один единый оператор. Если трассируемая подпрограмма находится в другом файле, даже неоткрытом, в случае необходимости он будет вызван в соответствующее окно редактирования. Трассировка подпрограмм стандартных модулей не осуществляется.
Наконец, программу можно остановить с помощью комбинации клавиш Ctrl+Break. Она остановится в том месте, где ее застало нажатие этих клавиш. Такая остановка может понадобиться, если программа начала заведомо неправильно работать: выдает неправильные результаты, зациклилась и т. д.
17.8.3. Работа с подпрограммами
Отладчик представляет ряд возможностей работы с подпрограммами. Во-первых, как уже указывалось выше, можно осуществлять трассировку подпрограмм (их построчное выполнение) с помощью команды меню Run | Trace into (см. п. 17.5.4). Во-вторых, имеется возможность найти расположение подпрограммы в одном из файлов (даже неоткрытом).
Это может потребоваться, чтобы посмотреть текст подпрограммы, ее локальные параметры и т. д. Найти расположение подпрограммы можно с помощью команды меню Search | Find procedure (см. п. 17.5.3). Наконец, в-третьих, можно воспользоваться окном используемых подпрограмм, которое вызывается командой меню Debug I Call stack (см. п. 17.5.6). В этом окне можно проследить путь, по которому управление было передано в конкретную подпрограмму.
Источник: 5byte.ru
Начальные сведения о программах на языке Pascal
Аннотация: Начальные сведения об алгоритмах, компиляции, отладке и тестировании. Начальные сведения о программах на языке Pascal. Идентификаторы. Переменные и типы данных. Константы. Метки.
Простейшие операторы. Ввод с консоли и вывод на консоль.
Алгоритм и программа
Наш курс посвящен изучению не только языка Pascal , но и некоторых алгоритмов , решающих наиболее известные задачи программирования, поэтому начнем мы со знакомства с некоторыми основополагающими понятиями.
Алгоритм — это последовательность действий, которые необходимо выполнить, чтобы решить поставленную задачу.
Программа же представляет собой набор команд на языке, понятном исполнителю, реализующий некоторый алгоритм . В нашем случае исполнителем является компьютер , а языком программирования будет язык высокого уровня Pascal . К сожалению, любой язык высокого уровня удобен только человеку, пишущему или отлаживающему программу , но совершенно непонятен компьютеру. Программа на таком языке называется исходным текстом и хранится во внешнем файле с расширением .pas.
Для перевода программы на язык низкого уровня , понятный исполнителю-компьютеру, существуют специальные программы-переводчики — компиляторы . Результатом работы компилятора (иными словами, результатом процесса компиляции) является исполняемый код , который записывается в файл с расширением .exe.
Свойства алгоритма
Любой алгоритм должен обладать следующими свойствами:
- массовостью ( алгоритм должен уметь решать не одну конкретную задачу, а целый класс однотипных задач);
- результативностью ( алгоритм должен выдавать результат своей работы);
- определенностью (на каждом шаге выполнения алгоритма исполнитель должен точно знать, какой шаг будет следующим).
Эти же свойства присущи и программам , реализующим алгоритмы . Если же хотя бы одно из них оказывается невыполненным, программа полностью теряет смысл.
Компиляция, отладка и тестирование
Никто не станет спорить с тем, что неграмотно написанный текст очень сложно, а порой и вовсе невозможно правильно перевести на другой язык. Это верно для естественных языков, это верно и для языков программирования. Но если переводчик-человек иногда может как-то догадаться, что же именно хотел сказать автор неграмотного текста, то программе-переводчику такое не по силам. Любой компилятор требует, чтобы программа , подаваемая ему для перевода, была абсолютно правильно составлена.
В языке программирования, как и в любом другом языке, существуют синтаксис — правила записи его конструкций — и семантика — смысл его конструкций. Компилятор проверяет только синтаксис . Поиском же семантических ошибок занимается программист в процессе тестирования и отладки своей программы
Отладка — это поиск и исправление ошибок в программе . Тестирование — это составление специальных наборов входных и выходных данных (тестов), а затем исполнение программы и проверка полученных результатов в поисках возможных семантических или логических ошибок.
Чтобы уменьшить затраты времени и сил на отладку , нужно писать синтаксически и логически правильные программы . Технологиям написания надежных программ , их тестирования и отладки будет посвящена последняя лекция нашего курса.
Средства разработки программ
Существует довольно большое количество средств написания программ на языке Pascal , позволяющих составлять, компилировать, исполнять и отлаживать программы на этом удобном языке структурного программирования 1 Подробное изложение истории языка Pascal , перечисление его «потомков», описание его преимуществ и взаимоотношений с другими языками программирования можно найти в статье Р. Богатырева «Летопись языка Паскаль» . Самыми известными сегодня являются Turbo Pascal (он же Borland Pascal ), Object Pascal (не путать с Delphi ) и Free Pascal . Их различные, в том числе и бесплатные, версии можно найти в Сети. Для определенности мы будем опираться на самую распространенную (хотя и не во всем соответствующую стандартам ISO) реализацию — Turbo Pascal .
Итак, в составе среды разработчика Turbo Pascal имеются:
- текстовый редактор, в котором можно набирать тексты программ ;
- компилятор , превращающий исходные тексты в исполняемый код ;
- отладчик, помогающий обнаруживать и исправлять ошибки в программе
Из многочисленных возможностей, предоставляемых средой Turbo Pascal , мы упомянем лишь самые важные — те, без которых написание программ становится совсем уж затруднительным.
- Нажатие клавиш F1, Alt+F1, Ctrl+F1 открывает экранную подсказку.
- Нажатие клавиши F2 позволяет сохранить исходный текст программы .
- Нажатие клавиши F3 открывает диалог выбора нужного файла (по умолчанию, отображаются только файлы с расширением .pas).
- Нажатие клавиши Alt+F5 показывает консоль (см. п. «Ввод и вывод: консоль» ниже) с результатами работы программы .
- Нажатие клавиши Ctrl+F9 начинает процесс выполнения программы . Если она еще не была откомпилирована, предварительно будет вызван компилятор
- Клавиши F7 и F8 обеспечивают трассировку — пошаговое выполнение программы , позволяющее проследить за процессом ее выполнения.
- Дополнительное окно Debug/Watch показывает текущее состояние выбранных переменных .
Более подробно о возможностях среды Turbo Pascal можно узнать в любом руководстве по ее использованию (в том числе и во встроенном Help).
Структура Pascal-программы
Для того чтобы Pasсal-компилятор правильно понял, какие именно действия от него ожидаются, ваша программа должна быть оформлена в полном соответствии с синтаксисом (правилами построения программ ) этого языка.
Приступим же к изучению этих правил.
Любая Pascal -программа может состоять из следующих блоков (напомним, что квадратными скобками здесь и далее помечены необязательные части):
program ; [ uses ;] (см. лекцию 13) [ label ;] (см. п. «Метки и безусловный переход» ниже) [ const = ;] (см. п. «Константы» ниже) [ type = ;] (см. лекцию 2) [ var : ;] (см. п. «Переменные и типы данных» ниже) [ procedure ;] (см. лекцию 8) [ function ;] begin end. (* конец основного тела программы *)
Сразу же необходимо сделать важную оговорку: поздние версии компиляторов языка Pascal уже не требуют указывать название программы , то есть строку
program ;
проще говоря, можно опустить. Но это возможно только в том случае, если вся программа содержится в одном модуле-файле. Если же программа состоит из нескольких самостоятельных кусков — модулей (см. лекцию 13), то каждый из них должен иметь заголовок (program или unit).
Любой из перечисленных необязательных разделов может встречаться в тексте программы более одного раза, их общая последовательность также может меняться, но при этом всегда должно выполняться главное правило языка Pascal : прежде чем объект будет использован, он должен быть объявлен и описан.
Внешний вид исходного текста программы
Компиляторы языка Pascal не различают строчные и прописные буквы, а пробельные символы игнорируют, поэтому текст программы можно структурировать так, чтобы читать и отлаживать его было наиболее удобно.
Например, операторы каждого логически единого блока программы стоит записывать с небольшим отступом от левого края экрана, и чем глубже вложенность блока , тем шире должны быть отступы перед входящими в него операторами . Этому правилу подчиняются все примеры, приводимые в курсе наших лекций 2 Отклонения от этого правила возможны в связи с ограничениями, связанными с версткой книги. . Кроме того, встроенный редактор среды Turbo Pascal автоматически выравнивает левые края строк. И еще один полезный совет: для облегчения отладки программы не следует записывать на одну строку несколько операторов .
Источник: intuit.ru