русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Трассировка Вашей программы.


Дата добавления: 2015-09-15; просмотров: 645; Нарушение авторских прав


Простейшая техника отладки - это пошаговая отладка, которая трассирует внутри процедур и функций. Загрузите программу RANGE.PAS в Turbo Pascal.

{$D+,L+}

{Для того, чтобы обеспечить

полную генерацию отладочной информации}

{$R-} {Для того, чтобы отключить проверку диапазона}

program RangeTest;

var

List:array [1..10] of integer;

Indx:integer;

begin

for Indx:=1 to 10 do List[Indx]:=Indx;

Indx:=0;

while (Indx < 11) do

begin

Indx:=Indx+1;

if List[Indx]>0 then

List[Indx]:=-List[Indx]

end;

for Indx:=1 to 10 do writeln(List[Indx]);

end.

Начните отладку, нажав клавишу F7. Это пошаговая команда. Turbo Pascal произведет компиляцию автоматически, а затем подготовится к пошаговой обработке этой программы. Заметим, что курсор выполнения расположен на операторе begin (строка 7). Помните, что курсор выполнения помечает следующую строку программы, которая должна быть выполнена.

Нажмите клавишу F7 несколько раз. Курсор выполнения переместится на оператор List[Indx]:=Indx и остановится. Это значит, что строка выполняется в цикле.

Выберите команду Debug/Watches/Add Watch (Ctrl-F7) для просмотра в окне Add Watch. Вы можете просматривать значения переменных, структур данных или выражений в окне Watch.

То, что появится в окне Add Watch зависит от того, где располагается курсор, когда Вы нажимаете на клавишу Ctrl-F7. Если курсор расположен на первой букве любой алфавитно-цифровой строки, внутри строки или сразу за ней, строка будет копироваться в окно Add Watch и подсвечиваться. Так, если курсор был спозиционирован на слове Indx, то Indx появится в окне. Если в окне необходимо что-либо изменить, начните набор на клавиатуре и первоначальное выражение и подсветка исчезнут.

Как только появится окно Add Watch, независимо от его содержимого, можно добавить в него текст, если нажать клавишу Ў (которая копирует дополнительный текст из редактора). Поместите List в окно, используя Ў, и нажмите Enter. Тогда в окне Watch в нижней части экрана появится строка:



List : (1,2,0,0,0,0,0,0,0,0)

Cнова нажмите клавишу Ctrl-F7, наберите слово Indx и нажмите Enter. Indx будет первым в списке в окне Watch:

Indx : 3

List : (1,2,0,0,0,0,0,0,0,0)

Нажмите клавишу F7 снова и Вы увидите, что значения Indx и List в окне Watch изменятся, отражая работу Вашей программы.

Как только Вы войдете в цикл while, Вы снова увидите, что значения Indx и List изменяются шаг за шагом. Заметим, что эти изменения в окне Window отражают действия каждой строки цикла после нажатия клавиши F7.

Продолжайте нажимать на клавишу F7, пока не достигнете начала цикла while, c Indx равным 10. Во время прохождения через цикл, Вы можете наблюдать как изменяются значения в окне Watch. Когда выполняется оператор

List [ Indx ] := - List [ Indx ];

значение Indx изменится на -11. Если Вы продолжаете нажимать на F7, то обнаружится, что вы вошли в бесконечный цикл.

Таким образом, если Вы наберете такую программу, она будет компилироваться и выполняться. Получается бесконечный цикл, так как цикл while выполняется 11 раз, а не 10, и последнее значение переменной Indx равно 11. Так как массив List содержит только 10 элементов, значение List(11) будет указывать на некоторую позицию памяти вне массива List. Из-за способа распределения переменных уже окажется, что значение List(11) займет в памяти тоже место, что и переменная Indx. Это значит, что при Indx=11, запись:

List [Indx] := - List [Indx]

идентична записи

Indx := -Indx.

Так как значение переменной Indx равно 11, этот оператор изменит ее значение на -11. В результате в программе начнется повторное выполнение цикла. Этот цикл теперь изменяет дополнительные байты в месте, соответствующем List[-11..0]. И т.к. значение Indx никогда не будет заканчивать цикл со значением большим или равным 11, то цикл никогда не закончится.

Важно отметить то, что используя лишь две клавиши (F7 и Ctrl - F7), через несколько минут, Вы быстро и легко прослеживаете промежуточные значения переменных и находите ошибку.



<== предыдущая лекция | следующая лекция ==>
Рестарт сеанса отладки. | Пошаговое выполнение программы.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.