BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Turbo Debugger 3.0 #2-3
Автор ""
Размер 408406 Байт
Страница 37 из 40
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

       TDeb 3.0 #2-3               = 157 =

                          Перемещение по программе
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Итак, вы  собираетесь запустить программу и исследовать про-
       цедуру ProcessLine. Сделать это можно несколькими способами. Мож-
       но нажать четыре раза клавишу F8 (для пропуска вызовов процедур и
       функций),  затем  нажать  один  раз  F7  (для  трассировки вызова
       ProcessLine).  Можно переместить курсор на строку 231,  нажать F4
       (команда  Go  to Cursor - Выполнение до курсора),  а затем нажать
       один  раз  F7  для  того,  чтобы  начать   выполнение   процедуры
       ProcessLine (трассировка вглубь).

            Можно привести и другие способы,  однако используем  следую-
       щий. Нажмите клавиши Alt-F9.  При этом  вам  выведется  подсказка
       (диалоговое окно)  для  ввода адреса кода,  до которого вы хотите
       выполнить  программу.  Наберите  ProcessLine  и  нажмите  клавишу
       Enter.  Программа будет выполнена до того места, когда управление
       получает процедура ProcessLine. Когда вам выведется подсказка для
       ввода строки,  введите те же данные,  что и раньше (то есть,  ABC
       DEF GHI).

            Здесь есть несколько циклов. Во внешнем цикле просматривает-
       ся  вся  строка.  Внутри  данного цикла имеется цикл для пропуска
       символов,  отличных от букв,  а второй цикл обрабатывает слова  и
       буквы.  Переместите  курсор к циклу while на строке 133 и нажмите
       клавишу F4 (Выполнение до курсора).

            Данный цикл будет  выполняться,  пока он не достигнет  конца
       строки, или не будет найдена буква. Последнее условие проверяется
       с помощью вызова  булевской  функции  IsLetter.  Для  трассировки
       функции IsLetter нажмите клавишу F7.  IsLetter представляет собой
       вложенную функцию,  которая воспринимает значение символа и возв-
       ращает значение True (истинное значение),  если это буква, и зна-
       чение False в противном случае.  При поверхностном анализе оказы-
       вается,   что  она  проверяет  только  прописные  буквы  (верхний
       регистр).  А она должна проверять символы в диапазоне 'A'...'Z' и
       'a'...'z'  или перед выполнением проверки преобразовывать символы
       в верхний регистр.

            Еще один ключ к поиску ошибки дает  анализ  обеих  введенных
       строк.  Вы ввели буквы верхнего и нижнего регистра от 'A' до 'I',
       но в общем итоге выведена только половина  букв.  Теперь  вы  уже
       знаете, почему.

            Давайте вернемся   назад  к  строке,  в  которой  вызывается
       IsLetter, с помощью еще одного метода перемещения: нажмите клави-
       ши  Alt-F8,  по  которым  программа будет выполнена до последнего
       оператора процедуры или функции.  Так как вторая введенная строка
       содержит только буквы нижнего регистра, каждый символ обрабатыва-
       ется, как пробел, и пропускается. Это приводит к неверному значе-
       нию счетчиков слов и букв и выявляет причину ошибок 1 и 4.



       TDeb 3.0 #2-3               = 158 =

                       Диалоговое окно Evaluate/Modify
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Кстати, существует еще один прекрасный способ выявить непра-
       вильное поведение IsLetter.  Нажав клавиши Alt-D E, выведите диа-
       логовое окно Evaluate/Modify (Вычисление/Модификация)  и  введите
       следующее выражение:

               IsLetter('a') = IsLetter('A')

            И тот,  и  другой параметр (a и A) являются буквами,  но ре-
       зультат вычисления False подтверждает,  то  они  интерпретируются
       функцией IsLetter по-разному.  (Окна вычисления и просмотра можно
       использовать для вычисления выражений,  выполнения  присваиваний,
       или,  как в данном случае, вызовов процедур и функций. Более под-
       робно об этом рассказывается в Главе 6.)


                                  Проверка
       ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

            Итак, две  ошибки выявлены,  остались три.  Ошибку 2 гораздо
       проще  найти,  чем  предыдущие.  Нажмите  Alt-F8  для  вызова  из
       ProcessLine, затем переместите курсор к строке 234 и нажмите кла-
       вишу F4, чтобы выполнить программу до этой позиции курсора.

            Программа TPDEMOB выведет вам подсказку  для  ввода  строки.
       Наберите abc def ghi и нажмите Enter.  В ответ на повторный вывод
       подсказки просто нажмите клавишу Enter. Теперь нажмите клавишу F7
       для трассировки процедуры ShowResults.

            Вспомните, что  вы  хотите определить,  почему среднее число
       слов в  строке  имеет  некорректное  значение.  В  первой  строке
       ShowResults вычисляется число строк на слово,  а не число слов на
       строке. Ясно, что этот порядок следует изменить на обратный.

            Поскольку вы уже находитесь в данном месте, можно убедиться,
       что  NumLines (число строк) и NumWords (число слов) имеют те зна-
       чения,  которые вы ожидаете. NumLines должно быть равно 2 и, пос-





кольку вы нашли ошибку в IsLetter, но не исправили ее, NumWords должно быть равно 3. Переместите курсор к NumLines и нажмите Alt- F10 I для проверки значения переменной. Окно Inspector (Проверка) показывает, что значение NumLines действительно равно 2. Теперь вы можете проанализировать NumWords. Нажмите клавишу Esc, чтобы закрыть окно Inspector, затем переместите курсор дальше на NumWords и снова нажмите Alt-F10 I (можно использовать также сок- ращение - клавиши Ctrl-I). NumWords содержит ожидаемое некоррект- ное значение 3, поэтому можно следовать дальше. Однако стоит ли торопиться? В этих вычислениях есть еще одна ошибка, отсутствующая в нашем списке. Перед выполнением деления значение второй переменной не проверяется на 0. Если вы запустите программу сначала и совсем не введете данные (нажав от ответ на TDeb 3.0 #2-3 = 159 = подсказку Enter), то программа аварийно завершит работу (даже ес- ли вы поменяете местами делимое и делитель). Чтобы убедиться в этом, нажмите Esc, чтобы закрыть окно Inspector, затем нажмите клавиши Alt-R P, чтобы завершить текущий сеанс отладки и F9, чтобы запустить программу сначала. В ответ на подсказку программу TPDEMOB нажмите клавишу Enter. Программа за- вершит работу и на экран выведется окно ошибки. Оператор следует изменить следующим образом: if NumLines <> 0 then AvgWords := NumWords / NumLines else AvgWords := 0; С ошибкой 2 покончено. Поскольку вы работаете с окном Inspector (Проверка), попробуйте использовать его для просмотра структуры данных. Переместите курсор выше к описанию LetterTable на строке 50. Поместите курсор на слово LetterTable и нажмите клавиши Alt-F10 I. Вы увидите, что это массив записей длиной в 26 элементов. Для просмотра каждого элемента массива используйте клавиши перемещения курсора, а для углубления в элемент массива - клавишу Enter. Это очень мощный способ проверки структур данных, он будет особенно удобен для последующего исследования связанного списка в процедуре HeapOnParms. Выражения просмотра ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Теперь давайте исследуем ошибку 3 в процедуре ShowResults (в выводе заголовка таблиц). Поскольку вы уже завершили программу, исследуя ошибку деления на 0, подготовьте ее для другого сеанса, нажав клавиши Alt-P (сброс программы). Затем нажмите клавиши Alt- F9, наберите showresults и нажмите Enter. После этого введите уже знакомые вам данные ABC DEF GHI и нажмите клавишу Enter. Наконец, наберите abc def ghi и дважды нажмите Enter. Теперь нужно остано- вить Турбо отладчик на ShowResults. В ShowResults для вывода таблиц букв используется вложенная процедура ShowLetterInfo Переметите курсор на строку 103, нажмите клавишу F4, затем F7 для перехода в ShowLetterInfo. Здесь имеется три цикла for. В первом цикле выводится заго- ловок таблицы, а во втором и третьем - значения частот. Исполь- зуйте клавишу F7 для перехода в первый цикл на строке 63. Позици- онируйте курсор на переменных FromLet и ToLet и используйте кла- виши Alt-F10 I для проверки их значений. Они выглядят верными (первое равно 'A', а второе - 'M'). Нажмите клавиши Alt-F5 для вывода экрана пользователя. Для возврата к окно Module (Модуль) используйте любую клавишу. При выполнении подобного цикла очень удобно использовать ок- TDeb 3.0 #2-3 = 160 = но Watch (Просмотр). Позиционируйте курсор на ch и нажмите клавиши Ctrl-W. Теперь для выполнения цикла по шагам используйте клавишу F7. Как и ожидалось, мы переходим к оператору Write на строке 64. Однако, если вы посмотрите на окно Watch (Просмотр), то увидите, что значение ch уже равно 'M' (уже выполнен весь цикл!). После ключевого слова do имеется лишняя точка с запятой, поэтому данный цикл 13 раз выполняется вхолостую. Когда управле- ние переходит к оператору Write на строке 64, то выводится теку- щее значение ch ('M'). Устранение лишней точки с запятой позволя- ет избавится от ошибки 3. Следующая ошибка ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Теперь настало время отследить ошибку при выводе параметров командной строки. Вспомним, что последний символ в каждом пара- метре командной строке содержал неверное значение ("мусор"). Воз- можно, неверен байт длины строки, или строковые данные портятся при последующих присваиваниях. Для выявления этого используйте окно Watch (Просмотр). Наж- мите клавиши Alt-F9, наберите parmonheap, затем нажмите Enter. Оператор for обработает в цикле все параметры командной строки, формируя связанный список и копируя каждую строку при ее поступ- лении в динамически распределяемую область памяти. Указатель Head указывает на начало списка, Tale - на последний узел в списке, а Temp используется, как временная память для выделения и инициали- зации нового узла. Так как строковые данные запорчены, нажмите клавиши Ctrl-F7 и добавьте в окно Watch следующее выражение:


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 38 39 40


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

частная стоматология в Москве:
надежная стоматологическая клиника
протезирование зубов и
отбеливание зубов в стоматологии
Музыка - скачать mp3 музыка
каталог партнерские программы
ручной бесплатный обмен ссылками цифровые камеры цифровые фотоаппараты -
цифровые видеокамеры

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.