| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
Alt-F10.
3. Выберите команду Set Option (Установить параметры) для
открытия диалогового окна Breakpoint Options (Параметры
точки останова.
4. Установите селективный переключатель Action (Действие) в
значение Execute (Выполнение).
5. Для вывода подсказки Action Expression (Выражение дейс-
твия) нажмите клавишу Tab.
6. Введите bufp++ в ответ на подсказку.
7. Нажмите клавишу Esc, чтобы закрыть диалоговое окно, и
клавиши Alt-F3 для возврата в окно Module (Модуль).
Теперь запустите программу, нажав клавишу F9. Введите две
входных строки:
one two three
four five six
В ответ на третью подсказку нажмите клавишу Enter, а когда
программа завершит работу, нажмите клавиши Alt-F5, чтобы увидеть
ее экран (экран пользователя).
Вы можете заметить, что ситуация существенно улучшилась. Об-
щее число строк и слов выглядит неверным, но таблица правильна.
Остановитесь на начале подпрограммы printstatistics и посмотрите,
передается ли ей для вывода корректное значение. Для этого снача-
ла перезагрузите программу (чтобы начать проверку заново), нажав
клавиши Ctrl-F2. Затем перейдите к строке 104 и нажмите клавишу
F4, чтобы выполнить программу до этой строки. Переместите курсор
на аргумент nlines и нажмите Alt-F10 I, чтобы посмотреть на его
TDeb 3.0 #2-3 = 153 =
значение. Вы видите значение 6, хотя должно быть значение 2.
Теперь вернитесь назад, туда, где эта подпрограмма вызыва-
лась из основной программы, и посмотрите на значение nlines (чис-
ло строк) там. Переместите курсор на строку 36 и поместите его
под nlines. Нажмите клавиши Alt-F10 I для вывода его значения. В
основной программе значение nlines равно 2, а это правильно. Если
вы перейдете в них к строке 46, то увидите, что два аргумента -
nwords и nlines - переставлены местами. Компилятор здесь не может
определить, какой именно порядок вы имели в виду. Он использует
то, что указано.
Если вы исправите эти две ошибки, программа будет работать
правильно. Если вы достаточно любопытны, то можете попробовать
запустить исправленную версию программы BCDEMO.EXE.
Сеанс отладки с использованием программы на Паскале
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Остальная часть данной главы посвящена описанию примера се-
анса отладки программы, написанной на Турбо Паскале. Если вы ра-
ботаете с Borland C++, то просмотрите предыдущие разделы, в кото-
рых описывается сеанс отладки программы на языке Си.
TDeb 3.0 #2-3 = 154 =
Поиск ошибок
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Перед началом сеанса отладки давайте запустим демонстрацион-
ную программу на Паскале, в которой содержится ошибка, и посмот-
рим, что она делает неверно. Скомпилированная версия этой прог-
раммы уже содержится на дистрибутивном диске.
Для запуска программы наберите ее имя и передайте ей в ко-
мандной строке три аргумента:
TPDEMOB first second third
Вам будет выведена подсказка для ввода строк текста. Введите
две строки текста следующим образом:
ABC DEF GHI
abc def ghi
Ввод завершает последняя пустая строка. После этого TPDEMOB
выводит анализ введенного текста:
9 letter(s) in 3 words in 2 lines(s) (1)
Average of 0.67 words per line (2)
Word length: 1 2 3 4 5 6 7 8 9 10 (3)
Frequency: 0 0 3 0 0 0 0 0 0 0 (4)
Letter: M (5)
Frequency: 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 (6)
Word starts: 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 (7)
Letter: Z
Frequency: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Word starts: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Program name: C:\td\tpdemob.exe (8)
Command line parameters: firs# secon% third (9)
1 - 9 букв в 3 словах; 2 - в среднем 0.67 слов на строке; 3
- длина слова; 4 - частота; 5 - буква; 6 - частота; 7 - начинает
слово; 8 - имя программы; 9 - параметры командной строки.
В этой выходной информации содержится пять различных ошибок:
1. Число слов сообщается неверно (3 вместо 6).
2. Число слов на строку неверно (0.67 вместо 3).
3. В заголовках второй и третьей таблиц выводится только по
одной букве (вместо A..M, N..Z).
4. Вы ввели две строки, каждая из которых содержит буквы от
TDeb 3.0 #2-3 = 155 =
A до I, но в таблицах частоты букв показан только счетчик
со значение 1 для этих букв.
5. Последний символ каждого параметра командной строки был
потерян, и на экран выводится случайный символ (хотя па-
раметры введены правильно).
Выбор стратегии поиска ошибок
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Первая задача состоит в том, чтобы решить с какой из ошибок
разбираться в первую очередь. Здесь можно предложить хорошее пра-
вило: начинайте с той ошибки, которая появилась первой. В данной
программе, после того, как данные инициализируются процедурой
Init, ввод с клавиатуры считывается функцией GetLine, а затем об-
рабатывается процедурой ProcessLine, пока пользователь не введет
пустую строку. ProcessLine просматривает каждую строку ввода и
обновляет глобальные счетчики. После этого процедурой ShowResults
выводятся результаты. Наконец, полностью независимая подпрограм-
ма - процедура ParmsOnHeap - строит связанный список параметров
командной строки в динамически распределяемой области памяти, а
затем выводит этот список в конце программы.
Среднее число слов на строку вычисляется процедурой
ShowResults на основе числа строки и слов. Так как значение счет-
чика неверно, очевидно стоит взглянуть на процедуру ProcessLine и
посмотреть, как изменяется значение переменной NumWords (число
слов). Даже если значение NumWords верно, число 0.67 слов на
строку не имеет смысла. Тогда ошибка возможно содержится в вычис-
лениях процедуры ShowResults, на что также стоит обратить внима-
ние.
Заголовки для всех таблиц выводятся в результате обращения к
процедуре ShowResults. Перед отслеживанием второй и третьей ошиб-
ки следует подождать завершения работы основного цикла. Так как
счетчики слов и букв содержат неверные значения, вероятно что-то
упущено в процедуре ProcessLine (это относиться к первой и чет-
вертой ошибке).
Наконец, когда вы закончите исследовать части программы, от-
носящиеся к работе со счетчиками слов и букв, для поиска и исп-
равления последней (пятой) ошибки займитесь процедурой
ParmsOnHeap.
Теперь, после того, как обдумали проблему и наметили план ее
решения, пришло время непосредственно начать отладку.
Запуск Турбо отладчика
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Для того, чтобы начать отладку нашего примера, загрузите от-
ладчик и укажите те же параметры командной строки:
TDeb 3.0 #2-3 = 156 =
TD TPDEMOB first second third
Турбо отладчик загрузит версию демонстрационной программы,
содержащую ошибку, и выведет начальный экран, меню и т.д. Если вы
хотите выйти из сеанса отладки и вернуться в DOS, нажмите клавиши
Alt-X (это можно сделать в любой момент). Если вы безнадежно
"заблудились", можно в любое время перезагрузить демонстрационную
программу, нажав клавиши Ctrl-F2, и начать сначала (при этом точ-
ки останова и выражения просмотра очищены не будут).
Для отладки таких подпрограмм, как ProcessLine, можно пред-
ложить два подхода. Вы можете либо выполнять ее построчно (по ша-
гам), убедившись, что она все делает правильно, либо остановить
программу непосредственно после выполнения процедуры ProcessLine
и посмотреть, верны ли результаты. Так как оба счетчика содержат
неверные значения, лучше внимательно проанализировать процедуру
ProcessLine и посмотреть, как обрабатываются символы.
|
adfun.ru
|
|
|
|