Турбо С: руководство пользователя. Часть 1

Турбо С: руководство пользователя. Часть 1 - Стр. 19

Печать PDF
Индекс материала
Турбо С: руководство пользователя. Часть 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
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Стр. 57
Стр. 58
Стр. 59
Стр. 60
Стр. 61
Стр. 62
Стр. 63
Стр. 64
Стр. 65
Стр. 66
Стр. 67
Стр. 68
Стр. 69
Все страницы
                                                                                
     равно 0, что является неправильным; длина первого слова обрабаты-          
     ваемой строки должна быть равна 2. Мы нашли ошибку!                        
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Остановимся и подумаем                                           
     -----------------------------------------------------------------          
                                                                                
          Прежде чем вы исправите найденную ошибку, давайте обсудим ее          
     влияние на отлаживаемую программу.  Некорректная длина слова  (0)          
     "имеет" два значение. Во-первых, из-за нее неправильно увеличится          
     значение нулевого элемента массива wordlencnt. А во-вторых, нуле-          
     вая длина приведет к тому,  что после обработки оператора wordptr          
     += i,  значение указателя wordptr не изменится. Из-за этого, вто-          
     рая итерация  цикла  loop  начнется  с  тем  же  самым  значением          
     wordptr, что и в первой.  Поэтому,  точно также как и при  первом          
     обращении к  wordlen (когда она вернула 0),  повторный вызов этой          
     функции также возвратит все тот  же  0.  Следовательно,  значение          
     wordptr останется неизменным и в третьей итерации цикла loop, и в          
     четвертой, и в последующих. Таким образом, найденная ошибка явля-          
     ется причиной "зависания" вашего компьютера.                               
                                                                                
          Какой вывод  можно сделать из проведенного исследования?  Вы          
     можете подумать, что найденная ошибка объясняет только часть неп-          
     равильной работы WORDCNT или же, что неправильная работа програм-          
     мы объясняется не только найденной ошибкой.  Для того, чтобы уви-          
     деть, что  же  происходит  дальше,  в  обоих  случаях  вы  можете          

                         - 153,154 -
                                                                                
                                                                                
     захотеть вновь запустить программу.  Сделав это, вы захотите сос-          
     редоточиться на обнаружении новых ошибок, причем, понятно, вы за-          
     хотите, чтобы уже просмотренный фрагмент программы  работал  пра-          
     вильно.                                                                    
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Что же делать?                                                   
     -----------------------------------------------------------------          
                                                                                
          Вы выяснили,  что неправильная  работа  WORDCNT  объясняется          
     ошибкой в функции wordlen.  Кроме того вы точно определили, в чем          
     выражается неправильная работа этой функции.  Чуть позже мы  вер-          
     немся к этим рассуждениям, а сейчас давайте познакомимся с коман-          
     дами отладчика. В процессе вашей первой попытки отладки программы          
     WORDCNT вы делали следующее:                                               
                                                                                
          # убеждались в том, что опции Debug/Source Debugging и O/C/C          
            /OBJ Debug включены (On).                                           
                                                                                
          # для подготовки WORDCNT к  отладке  выбирали Compiler/Build          
            All.                                                                
                                                                                
          # пользуясь командами редактора, перемещали курсор на нужные          
            фрагменты WORDCNT;  выбирали Break/Watch/Toggle Breakpoint          
            для установки точек останова в позиции курсора; для запус-          
            ка WORDCNT до заданной точки останова пользовались Run/Run          
            (или же "горячей" клавишей Ctrl-F9).                                
                                                                                

                         - 155,156 -
                                                                                
                                                                                

          # пользовались  Run/USER SCREEN или Alt-F5 для просмотра вы-          
            ходных данных вашей программы на  пользовательском экране.          
                                                                                
          # для обработки операторов функции  main  (по  одной  строке          
            программы  за шаг) выбирали Run/Step Over (или же нажимали          
            "горячую" клавишу F8).                                              
                                                                                
          # выбрав Debug/Evaluate (или нажав  Ctrl-F4),  просматривали          
            значения нескольких переменных.                                     
                                                                                
          # проанализировав найденную ошибку,  сделали вывод,  что она          
            объясняет некорректную работу WORDCNT и,  поэтому, требует          
            немедленного исправления.                                           
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
               Содержимое окна вычислений, установленное по умолчанию           
     -----------------------------------------------------------------          
                                                                                
          Напомним, что выбор Debug/Evaluate переносит в поле вычисле-          
     ний  слово,  на  которое  указывает курсор в окне редактирования.          
     Благодаря этому,  вы можете облегчить себе работу, если перед об-          
     ращением к Debug/Evaluate установите курсор над переменной , зна-          
     чение которой вы хотите оценить. Даже если все выражение, которое          
     вы хотите вычислить, является весьма сложным, то вы можете значи-          
     тельно ускорить его ввод,  если будете редактировать принятое  по          
     умолчанию  в окно вычислений выражение,  а не вводя его на пустом          
     месте.  Более того,  нажимая клавишу со стрелкой вправо вы можете          
     "перенести" из окна редактирования в окно вычислений еще несколь-          
     ко требуемых вам символов.  Каждый раз,  когда вы будете нажимать          
     эту клавишу, будет выполняться перенос одного символа.                     
                                                                                
          Например, пусть   вы  хотите  вычислить  значение  выражения          
     linebfr[i-1], которое находится в следующей строке исходного фай-          
     ла:                                                                        
                                                                                
          if (linebfr[i-1] != '\n' )                                            
                                                                                

                         - 157,158 -
                                                                                
                                                                                
          Для этого   переместите   курсор   к   linebfr   и  выберите          
     Debug/Evaluate.  В поле вычислений (Evaluate)  будет  скопировано          
     слово linebfr. Нажав пять раз клавишу со стрелкой вправо, добавь-          
     те к этому слову [i-1], затем нажмите Ввод.                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                Изменение значения оцениваемого выражения                       
     -----------------------------------------------------------------          
                                                                                
          Элемент меню Debug/Evaluate способен изменять значения неко-          
     торых типов выражений, а именно, тех выражений, которые соответс-          
     твуют конкретному элементу данных,  например:  i,  linebfr[i] или          
     *(linebfr+i).                                                              
                                                                                
          Попробуем вычислить значение переменной i,  а затем изменить          
     его. После того,  как для получения значения переменной i вы наж-          
     мете Ввод,  отладчик выведет это значение в поле результата.  Пе-          
     рейдите (с помощью клавиши со стрелкой вниз) в поле нового значе-          
     ния и введите в него то значение,  которое вы хотите присвоить i.          
     Например, вы можете ввести i+1 (с целью увеличения i на страницу)          
     или же просто 17.  После того,  как вы нажмете Ввод, отладчик вы-          
     числит введенное вами выражение,  изменит значение i, а затем вы-          
     ведет в поле результата новую  величину.  (Замечание:  Запомните!          
     После того,  как  в поле новой величины в нажмете Ввод,  значение          
     переменной будет измененно в соответствии с  введенным выражением          
     и нажатие  после этого клавиши Esc не приведет к отмене сдаланных          
     изменений.) Для того, чтобы выйти из Debug/Evaluate, нажмите Esc,          
     затем снова  выберите  Debug/Evaluate и посмотрите значение пере-          

                         - 159,160 -
                                                                                
     менной i с тем,  чтобы убедиться в том, что оно изменилось. После          
     этого восстановите   старое   значение   i  и  опять  выйдите  из          
     Debug/Evaluate.                                                            
                                                                                
          Изменив значение какого-либо выражения,  вы можете  избежать          
     проявления программной  ошибки,  что  позволит вам запустить свою          
     программу дальше, в результате чего могут быть найдеты какие-либо          
     дополнительные ошибки.  Кроме  этого изменение значений выражений