Реферат: Отладка программ пользователя в Tubro Pascal
end. {программы TestSort}
Предположим, что Вы отлаживаете процедуру Sort. Вы хотите осуществить трассировку процедуры Sort, включая проверку значения внутри List до вызова Sort. Однако, выполнять 100 раз инициализацию внутри List очень утомительно. Есть ли способ выполнять цикл, не останавливаясь на каждой выполняемой строке.
Да, фактически, существует несколько способов. Во-первых, Вы могли бы выделить этот цикл в отдельную процедуру и нажать клавишу F8 для того, чтобы обойти ее трассировку, но это слишком нерационально. Во-вторых, Вы могли бы установить внутри программы точку прерывания. Мы объясним, что это за точки прерывания, и как они используются немного позже. В конце концов, Вы могли бы использовать команду Run/Go to Cursor (F4). Переместите курсор на строку с вызовом Sort, а затем нажмите на клавишу (F4). Ваша программа будет выполняться до достижения строки, помеченной курсором. Курсор выполнения переместится на эту строку; затем Вы можете начать трассировку с этого места, нажимая на клавишу F7, для того, чтобы можно было сделать трассировку внутри Sort.
Команда Run/Goto Cursor (F4) действует на вложенных уровнях вызовов подпрограмм, даже если их исходный код находится в другом файле. Например, Вы могли бы разместить курсор где-либо внутри процедуры Sort и нажать на клавишу F4; программа выполнялась бы до этой строки. По существу, Sort могла бы быть выделена в отдельный модуль, отладчик бы уже знал, когда нужно остановиться и что отобразить.
Существуют три случая, когда команда Go to Cursor (F4) не будет выполнять программу до отмеченной курсором строки.
Первый, когда Вы расположили курсор между двумя выполняемыми строками; например, на пустой строке или строке с комментариями. В этом случае программа будет выполняться до следующей строки, содержащей оператор, который может быть выполнен.
Второй случай, когда курсор расположен вне процедурного блока, например, на операторе объявления переменной или операторе program. Отладчик будет выводить сообщение "no code generated for this line" (для этой строки код не генерируется).
Третий случай, когда Вы располагаете курсор на строке, которая никогда не выполняется. Например, строка располагается выше курсора выполнения (предполагается, что вы находитесь не в цикле) или строка является частью else - условного оператора, когда выражение if имеет значение true. В этом случае отладчик будет действовать так, как если бы выполнялась команда Run/Run (Ctrl-F9); программа будет выполняться до конца или до точки прерывания.
Предположим, что Вы трассируете процедуру Sort,затем хотите завершить работу программы и посмотреть выходные результаты. Каким способом сделать это? Сначала нужно переместить курсор к последнему оператору end основной части программы, а затем выполнить команду Run/Go to Cursor (F4). Или проще, нужно выполнить команду Run/Run (Ctrl-F9). Она позволяет отладчику продолжить нормальное выполнение программы пользователя. Программа будет выполняться до конца, или до тех пор, пока Вы не достигнете точки прерывания или не будет нажат Ctrl-Break.
Использование точек прерывания.
Точки прерывания являются важным инструментом отладки. Точка прерывания подобна знаку остановки, введенному в программу пользователя. Когда программа встречает такую точку, она останавливает свое выполнение и ожидает дальнейших отладочных инструкций.
Примечание: Вы можете иметь до 16 активных точек прерывания.
Заметим, что точки прерывания существуют только во время сеанса отладки; они не сохраняются в файле .EXE, если программа компилируется на диск. Чтобы задать точку прерывания, используйте обычные команды редактирования для перемещения курсора на каждую строку программы, где Вы хотите сделать паузу. Каждый раз выполняйте команду Debug/Toggle Breakpoint (Ctrl-F8). Когда строка отмечается как точка прерывания, она высвечивается. Это не должна быть пустая строка, комментарии, директивы компиляции; объявления констант, типов, меток, переменных; заголовком программы, модуля, процедуры или функции. Как только Вы задали точки прерывания, выполняйте программу с помощью команды Run/Run (клавиша Ctrl-F9). Сначала программа будет выполняться нормально. Когда встретится точка прерывания, программа остановится. Соответствующий исходный файл (основная программа, модуль или включенный файл) загружается в окно Edit, которое визуализируется на экране и курсор выполнения помещается на строку с точкой прерывания.
Заметим, что точка прерывания не высвечивается, когда на ней находится курсор выполнения. Если какие-либо переменные или выражения были добавлены в окно Watch, то они также выводятся на дисплей со своими текущими значениями.
Затем, пользователь может использовать любой режим отладки.
Вы можете осуществлять пошаговое выполнение программы, используя команду Run / Trace Into, Step Over или Go to Cursor (F7, F8 или F4). Вы можете проверить или изменить значения переменных.
Вы можете добавить или удалить выражения из окна Watch.
Можно назначить или удалить точки прерывания.
Можно просмотреть выходные результаты программы, используя команду Windows/User Screen (Alt-F5).
Вы можете перезапустить программу сначала ( Run/Program Reset и, затем, команду пошагового выполнения).
Можно продолжить выполнение до следующей точки прерывания (или до конца программы), выполнив команду Run/Run (Ctrl-F9).
Для удаления точки прерывания из строки переместите курсор на данную строку и, выполнив команду Debug/Toggle Breakpoint (или нажмите Ctrl-F8) еще раз. Эта команда включает или отключает точку прерывания в строке; если она используется для строки с точкой прерывания, то строка становится нормальной.
Давайте вернемся к примеру, который был рассмотрен ранее.
begin {основная часть программы Test.Sort}
Randomize;
Count := NLMax;
for I := 1 to Count do
List [I] := Random (1000);
Sort ( List,Count );