Меню опции DEBUG
BREAKPOINTS. Эта опция позволяет просмотреть все контрольные точки и при необходимости удалить, переместить любую контрольную точку или задать условия ее работы. В диалоговом окне опции (рис.П1.6) приводится список всех контрольных точек с указанием имени файла (колонка Breakpoints list), номера строки в этом файле (колонка Line #), с которой связана контрольная точка, условия, при котором срабатывает останов программы в этой точке (колонка Condition), и количества проходов (колонка Pass), в течение которых останов не происходит. Цветным указателем выделяется текущая контрольная точка.
Puc.П1.6. Диалоговое окно опции Debug/Breakpoints
В качестве условия, управляющего работой контрольной точки, можно указать любое допустимое условное выражение, которое будет вычисляться в ходе исполнения программы; контрольная точка будет игнорироваться до тех пор, пока значение этого выражения не окажется равным TRUE. Вычисление выражения и останов будут происходить только тогда, когда с момента запуска программы будет выполнено заданное количество обращений к строке с контрольной точкой (колонка Pass).
С помощью командного поля Edit можно отредактировать текущую точку, т.е. установить новые ее параметры (файл, номер строки, условие и количество проходов). Задав новый файл и/или номер строки, можно переместить точку на новое место. Командное поле Delete используется для удаления текущей точки, а поле Clear all - для удаления всех контрольных точек. С помощью поля View можно загрузить в окно редактора и установить его содержимое так, чтобы увидеть соответствующую контрольную точку.
CALL STACK. Делает активным окно программного стека. В этом окне отображаются все вызовы процедур и функций. Внизу стека находится PROGRAM, т.е. имя Вашей профаммы, в вершине стека - текущая процедура (функция). Каждое новое обращение к процедуре (функции) отображается в этом окне в виде имени подпрограммы и списка параметров вызова. Эта опция вызывается из редактора командой Ctrl-F3.
REGISTER. Делает активным окно регистров. В этом окне отображается текущее состояние всех регистров микропроцессора ПК.
WATCH. Делает активным окно отладки. OUTPUT. Делает активным окно программы.
USER SCREEN. Делает активным окно программы и распахивает его на весь экран. Вызывается из редактора командой Alt-F5.
EVALUATE/MODIFY. Эта опция дает возможность в процессе отладки просмотреть содержимое любой переменной или найти значение любого выражения. При необходимости можно с ее помощью установить новое значение любой переменной. При обращении к ней на экране разворачивается диалоговое окно, содержащее три поля: EXPRESSION (выражение), RESULT (результат) и NEW VALUE (новое значение) (рис.П1.7).
Puc.П1.7. Диалоговое окно опции Debug/Evaluate/Modify
В первом поле следует ввести имя любой переменной или некоторое выражение. Сразу после того, как Вы нажмете Enter, в поле RESULT появится соответствующее значение или сообщение Unknown identifier (неопределенный идентификатор), если такая переменная не определена в Вашей программе. К моменту вызова опции программа должна находиться в режиме отладки, в противном случае это сообщение будет даваться для любых переменных и выражений с их участием.
Если Вы запросили значение переменной, Вы можете перевести курсор в нижнее поле NEW VALUE и установить новое значение переменной - это значение будет немедленно передано в программу.
При обращении к опции среда анализирует ближайшее окружение курсора в активном окне редактора и, если это возможно, выделяет идентификатор или константу, на которую указывает курсор. Выделенное автоматически переносится в поле EXPRESSION и предлагается в виде вычисляемого выражения. Таким образом, если перед вызовом этой опции установить курсор на интересующий Вас идентификатор, останется лишь нажать на Enter, чтобы тут же получить его значение в поле RESULT. Если предлагаемый идентификатор Вас не устраивает, можно его отредактировать или ввести новый. Для ввода нового нажмите на любую алфавитно-цифровую клавишу, и предлагаемый в окне идентификатор исчезнет, заменившись вновь введенным символом. Для перехода к редактированию предлагаемого идентификатора следует сразу же после появления окна нажать Ноте или End, затем перевести курсор к нужному месту идентификатора и отредактировать его с использованием клавиш Ins, Del и Backspace. Наконец, если сразу после вызова опции нажать End, а затем - клавишу перевода курсора вправо, появившийся в поле EXPRESSION идентификатор дополнится символом, расположенным справа от него в тексте программы. Теперь при каждом нажатии на клавишу перевода курсора вправо очередной символ из текста программы будет копироваться в поле EXPRESSION. Описанная возможность существенно облегчает ввод длинных выражений и составных идентификаторов.
Вы можете ввести (и вычислить) выражения с участием констант и переменных из Вашей программы, а также некоторых стандартных функций. Выражения составляются по правилам формирования выражений Турбо Паскаля, причем тип выражения может быть любым стандартным или определенным в программе типом. Фактически единственным ограничением на выражения является то, что в них нельзя использовать вызовы нестандартных функций (можно использовать только следующие предварительно определенные функции и константы: ABS, ADDR, CHR, DSEG, HI, IORESULT, LENGTH, LO, MAXAVAIL, MEMAVAIL, ODD, OFS, ORD, PRED, PTR, ROUND, SEG, SIZEOF, SPTR, SSEG, SUCC, SWAP, TRUNC, а также массивы MEM, MEMW и MEML).
Формат выводимого в поле RESULT результата по умолчанию совпадает со стандартным для Турбо Паскаля, но Вы можете управлять этим форматом с помощью специальных ключей. Ключ помещается в конце выражения (переменной) и отделяется от него запятой. Например, запрос
MemL[$40:Q] ,h
выдаст содержимое четырех байт оперативной памяти в шестнадцатеричном формате.
Допускаются следующие ключи:
С - формат CHAR (символьный);
S - формат STRING (строковый);
D - формат целых десятичных чисел;
$, H или Х- шестнадцатеричный формат;
Fn - формат REAL (вещественный); число п определяет количество значащих цифр в выводимом результате;
М - формат копии памяти: выводится содержимое переменной побайтно, начиная с младшего байта, в шестнадцатеричном формате; если ключ указан для выражения, он игнорируется;
Р - формат POINTER (указатель); результат выводится в виде PTR(SEG,OFS), например, Ptr($3EA1,$20);
R - формат RECORD (запись); выводится в круглых скобках список полей с указанием их значений, например: (X:1;Y:10;Z:S).
Перед ключей формата можно указать целое число, которое трактуется как коэффициент повторения. Если, например, в поле EXPRESSION содержится
UserList[0], 4D
то в качестве результата будет выдано в формате целых десятичных чисел значение четырех последовательных элементов массива User-List, начиная с элемента 0, т.е. UserList[0], UserList[1] и т.д. Коэффициент повторения относится только к переменным (по отношению к выражениям он игнорируется) и его можно указывать без ключа формата. Если, например,
var
UserList array [0..20] of integer;
то обращения
UserList[0] ,4D
UserList[0] ,4
дадут идентичные результаты.
Выражения в поле EXPRESSION можно задавать многократно, можно использовать также ранее введенные выражения из протокола опции. Для выхода из диалога используйте клавишу Esc или поля Cancel и . при работе с мышью. Опцию можно вызвать непосредственно из редактора командой Ctrl-F4. Отметим, что эта опция может использоваться как встроенный в Турбо Паскаль калькулятор.
ADD WATCH. С помощью этой опции можно указать отладчику те переменные и/или выражения, за изменением значений которых Вы хотели бы наблюдать при отладке программы. Указанные переменные и выражения вместе с их текущими значениями будут постоянно содержаться в окне наблюдения, доступ к которому возможен с помощью клавиши F6. Если Вы сделаете активным это окно, Вы сможете перемещаться в нем, вызывая при необходимости «прокрутку» его содержимого. Таким образом можно наблюдать за произвольным количеством переменных и выражений.
Опцию можно вызвать непосредственно из редактора командой CtrI-F7. При этом справедливо все сказанное выше относительно вызова опции DEBUG/EVALUATE/MODIFY, т.е. выделение идентификатора, его редактирование и дополнение, использование коэффициента повторения и ключей формата. Сразу после добавления отслеживаемого выражения активизируется окно наблюдения.
ADD BREAKPOINT. С помощью этой опции меню DEBUG Вы можете установить в текущей строке контрольную точку. Текущая строка - это строка с курсором в окне редактора. Если для нее установлена контрольная точка, строка выделяется цветом (яркостью). В программе можно установить произвольное количество контрольных точек. После запуска программы с установленными контрольными точками (точкой) отладчик прекратит исполнение программы перед выполнением того оператора, который содержится в первой (по логике работы программы) контрольной точке. При этом на экране появится окно редактора с контрольной точкой и среда перейдет к режиму отладки программы. Если контрольная точка задана для строки, не содержащей исполняемого оператора (например, для строки со словом BEGIN), программа остановится перед первым после этой строки исполняемым оператором. Останов в контрольной точке можно сделать условным. Однажды установленная контрольная точка действует на каждое очередное обращение к соответствующей строке программы.
В диалоговом окне опции поле Condition задает условие останова. Это может быть произвольное логическое выражение с использованием любых переменных, констант, вызовов функций. Если к моменту исполнения оператора с контрольной точкой это выражение имеет значение TRUE, произойдет останов прогона и среда перейдет к режиму отладки. Поле Pass count указывает количество обращений к оператору с контрольной точкой, после которого произойдет останов.
С помощью команды Ctrl-F8 контрольную точку можно установить/снять непосредственно из режима редактирования.