Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Часть Становимсяпрограммист




Теперь достоверно известно, что ошибка находится в операторе while и что имен- но она вызывает аварийное завершение программы. Чтобы узнать, что именно проис- ходит, следует остановить программу непосредственно перед выполнением оператора while и разобраться в ней более детально.

 

Использование точекостанова

Пошаговый режим хорош только на этапе предварительного поиска ошибки. По- сле того как стало известно, в каком месте программы возникла ошибка, удобнее всего воспользоваться возможностью отладчика, называемой                                                                                                                                  останова.

Чтобы увидеть, как работает точка останова, вновь сбросьте отладчик с помощью команды Program Reset. Мы могли бы снова добраться до оператора while в пошаговом режиме, как это было сделано ранее, однако постоянно выполнять большие программы в пошаговом режиме было бы слишком утомительно. Вместо этого можно установить точку останова. Поместите курсор на операторе while и выполните команду Set breakpoint. Редактор выделит эту строку красным цветом, как показано на рис.

 

Edit Search                                           Options

 

 

int int

// найти конец         строки [

 

//       вторую строку концу (

' 44:1                                                   •

 

 

' Save Open ZOOM Next

11.6. Строка с точкой останова выделена красным цветом

Точка останова заставляет программу работать в нормальном режиме до точки, в которой нужно остановить программу. После этого отладчик перехватывает управ- ление и останавливает программу. Точки останова очень удобны, если вы уже знаете, где искать ошибку, или если просто возникла необходимость выполнить программу до определенного места.

После установки точки останова выполните команду Go. Программа будет выпол- няться нормально до тех пор, пока не дойдет до оператора while. После этого она передаст управление отладчику.

Осталось только узнать, что же вызывает ошибку.

Просмотр и редактирование переменных

Нет смысла вновь выполнять оператор while, поскольку точно известно, что программа будет прервана в результате ошибки. Чтобы понять, почему возникает ошибка, необходимо получить дополнительную информацию. Например, не помеша- ло бы узнать, что находится  в переменной Index непосредственно перед вы- полнением цикла while.

Глава11.ОтладкапрограммнаC++                                                          129


Search Run &

intnTargetlndex; int


h:/sss.cpp


Index


 

 

И Help


 

 

Отладчик позволяет программисту просматривать и изменять содержимоепеременных


Сначала дважды щелкните мышью на имени  переменной              Index, а после этого вызовите команду отладчика View Variable. При этом появится окно с именем этой переменной в первой строке. Щелкните на  кнопке                                                                                                              чтобы узнать текущее значение переменной. Результат этих действий показан на рис.

Если еще раз внимательно просмотреть исходную программу, становится понятно, что в процессе ее выполнения не были инициализированы переменные nTargetln - dex и   Чтобы убедиться в этом, введите в строке ввода нового значе- ния (New Value) значение 0 и щелкните на кнопке  (то же самое нужно сделать и для переменной                              После этого можно закрыть окно просмотра пере- менных и выполнить команду Step Over.

Теперь, после инициализации этих переменных, программа уже не выдаст сооб- щения об ошибке. Каждое следующее выполнение команд Step Over или Step вызо- вет повтор цикла while. Поскольку тело цикла не содержит никаких команд, курсор снова вернется на оператор while. При этом в ходе каждого выполнения nTargetln - dex будет увеличиваться на 1.

Чтобы не открывать окно просмотра переменной                          во время каждого выполнения цикла, дважды  щелкните на                                                                           и вызовите команду Add Watch. Появится окно с именем этой переменной и ее значением в правой части. После этого выполните команду Step In еше несколько раз. При каждом повторении nTargetlndex будет увеличиваться на 1, а после нескольких циклов произойдет пере- ход на следующую за циклом строку.

Установите точку останова на строку, содержащую закрывающую фигурную скобку функции    и выполните команду Go. Программа остановится непосред- ственно перед выходом из функции.

Чтобы проверить содержимое созданной этой функцией строки, дважды щелкните на переменной szTarget и выполните команду View Variable. Результат приведен на рис.

Число 0x68298 является адресом строки в памяти. Эта информация может пригодиться при отслеживании указателей. Адреса могут очень пригодить- ся при работе со связанными списками.

 

 

130                                                          ЧастьII.Становимсяпрограмми


E  Fil e  Edi t  Searc h Ru nCO M                                                                                                                              


W indo w s


t                                            -

//                                              К

 


 

V












I szTarget:


v a l u e


I

H i

 

в

BBS1

Ш


Даже после инициализации переменных результат соединения стрококазываетсяневерным

Дописывание символов после символа окончания строки (нулевого сим- вола) или отсутствие символа окончания строки — две самых распростра- ненных ошибки при работе со строками.

 

Теперь, когда известно, где находятся обе ошибки, было бы неплохо исправить их в ис- ходной программе (пока мы не забыли, где они находятся). Вызовите команду Pro- gram Reset и исправьте функцию       так, как показано в следующем

v o i d                                                                                                              c h a r

{

in t                                             =

int                                                     0 ;

 

//                        конец первой строки while                              )

 

// присоединяем вторую строку к концу первой

 

{

 

 

+ +

 

// завершаем конечную строку

=

)

было найдено несколько ошибок, еше не значит, что в программе нет

других "жучков". Необходимо довести процесс отладки до конца. Установите про- смотр и         и самостоятельно проверьте их содержимое во время выполнения следующего цикла.

Глава11.Отладкапрограммна C++                                                131


Вам действительно необходимо сделать это самостоятельно. Только тогда вы поймете, какое эстетическое удовольствие можно получить, глядя на то, как от цикла к циклу одна строка растет, а другая одновременно уменьшается.

 

Чтобы убедиться, что все работает правильно, удалите все точки останова и запус- тите программу с помощью команды Go. Приведенный ниже вывод программы вы- глядит правильно.

Эта программа соединяет две строки (Эта программа не содержит ошибок.)

 

Введите строку    строка

Введите строку    СТРОКА

 

эта строка - ЭТА СТРОКА

Мои поздравления новоиспеченным экспертам по отладке программ!

 

Главы, составляющие первые две части книги, позволяют вам писать собственные (уже нетривиальные) программы. Именно такова приведенная ниже программа BUDGET.

Эта программа будет представлена в книге еще не раз. И в каждой версии будут ис- пользованы новые возможности, изученные в предыдущих главах. Таким образом, вы уви- дите, как применить возможности языка, описанные ранее. Текущий вариант программы использует "функциональные" возможности (т.е. возможности функций) языка

Программа BUDGET моделирует простейший банковский счет (в очень ном виде). Эта программа будет выполнять такие действия:

|    создавать один или несколько банковских счетов; присваивать уникальный номер каждому счету;

работать со счетом — создание депозита и снятие денег;

I   выводить окончательный баланс всех счетов, после того как пользова- тель решит выйти из программы.

Эта версия программы будет следить за тем, чтобы баланс не был меньше нуля (банк может быть дружественным по отношению к вам, но не до такой же степени!). Набор правил будет разрастаться с развитием программы в следующих частях книги.

Программа BUDGET приведена ниже.

// BUDGET1.CPP "Функциональная" программа бюджета

 

 

//         количество счетов const int  =

 

// информация о счете

 

double

 

// Прототипы функций

void process      accountNurnber, doubles      balance);

 


Поделиться:



Последнее изменение этой страницы: 2019-04-19; Просмотров: 216; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.026 с.)
Главная | Случайная страница | Обратная связь