MIME-Version: 1.0 Content-Location: file:///C:/EC2C4CD5/5.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="us-ascii"
5. Метод=
;ы
отладки и
борьбы с
ошибками
От ошибок никт = 86; не застраховаl= 5;, и они случаю= 090;ся даже у опытных программисm= 0;ов. Таким образ = 86;м, все сводитс= 03; к тому, чтоб = 99; их поскорее обнаружить. Допустим, сделана опечатка и неправильнl= 6; написано какое-нибуд= 00; ключевое сл = 86;во. В этом случае при попытке запуска про = 75;раммы внизу появляется окно, в котором ото = 73;ражены сообщения о = 73; ошибках. При этом програ = 84;ма не запустится. Благодаря подсказке такую ошибк = 91; легко найти = 080; исправить.
Частой ошибкой начинающих является пропуск кон = 89;трукции begin – end в цикле. При этом имеется в ви= 076;у, что в цикле должны выполнятьсn= 3;, например, об= 077; команды, но на самом-то деле в цикле, конечно, будет выполнятьсn= 3; только перв = 72;я, а вторая выполнится только один раз – потом, когда программа выйдет из ци= 082;ла. При попытке запуска появляется сообщение. Н= 086; это не ошибка, а предупреждk= 7;ние. В нем обращается внимание на то, что параметр цикла после выполнения цикла может быть неопределеl= 5;ным (он присутст= 074;ует во второй команде).
Однако, несмотря на предупреждk= 7;ние, программа м = 86;жет запуститьсn= 3;. Если вводятся дкакие-либо данные, то по= 1103;вляется сообщение о = 73; исключителn= 0;ной ситуации – exception.= При этом програ = 84;ма приостанавl= 3;ивается, переходя из режима исполнения = 74; режим отладки. Что= 073;ы перейти к обычному редактировk= 2;нию кода, лучше остановить программу. j= 9;то можно сдела = 90;ь с помощью команды Program Reset. Затем можно поправить ошибку и вновь запустить программу.
В большие программы всегда закрадываюm= 0;ся ошибки. Их на= 1076;о быстро и квалифицирl= 6;ванно найти и исправить. М= 077;ханизм исключителn= 0;ных ситуаций (exception) – одно из больших достоинств Delp= hi. С их помощью вы можете контролироk= 4;ать возникновеl= 5;ие ошибок и создавать в результате устойчивые = 82; ошибкам про = 75;раммы.
По мере знакомства = 89; языком и средой прог = 88;аммист проходит несколько этапов. На первом этап = 77; он, по незнанию, путает типы, забывает ставить знаки препинания (например, то= 1095;ку с запятой в конце строки), некорректнl= 6; использует операторы и т.п. В результате написанный им код в принципе не = 74;озможно исполнить. И это хорошо – поскольку д= ;опущенные им ошибки оказываютсn= 3; автоматичеl= 9;ки выявленнымl= 0; на этапе компиляции, более того, часто среда программирl= 6;вания сама подсказываk= 7;т, какая ошибк = 72; допущена, и, что важно, ук= 1072;зывает строку, которую нужно поправить. П= 086; мере изучения языка и борьбы с синтаксичеl= 9;кими ошибками программисm= 0; плавно пере = 93;одит к следующем = 91; этапу. Тепер= 100; он уже не дел= 1072;ет таких простейших ошибок, но, поскольку сложность его програм = 84; возрастает, возрастает = 80; вероятностn= 0; совершения им ошибки, пр= 1080; которой программа все равно запустится. Поскольку, с точки зрени= 03; компиляторk= 2;, явной ошибк = 80; нет, а некоторые странности кода, по-видимому, являются замыслом программисm= 0;а. Однако компилятор все-таки сообщает об этих странностяm= 3; с помощью предупреждk= 7;ний (Warning). Советуем всегда обращать на них внимани = 77;, проверять при их появлении, нет ли ошибк= 080;, и вообще стараться писать код так, чтобы не было предупреждk= 7;ний.
Опасность таких скрытых ошибок состоит:
1) в том, что они таятся в той части кода, которую программисm= 0; написал и уверен, что она правильная (= 087;рограмма запустиласn= 0;), а значит, и не очень внимательнl= 6; будет искат= 00; ошибку;
2) в том, что проявляетсn= 3; эта ошибка совсем в дру= 075;ом месте кода – не в том, в котором допущена. А это приводи = 90; к долгим поискам ее п= 086; всей програ = 84;ме.
Наконец, когда программисm= 0; становится уже опытным = 080; приступает = 82; сложным проектам, св= 103;занным с использоваl= 5;ием объектов, ук= 072;зателей и т.п., на его пути стоят е= 097;е более опасные ошибки, о которых компилятор не выдает даже предупреждk= 7;ний. А ошибки эти весьма серьезные, поскольку они, в основн= 1086;м, связаны с некорректнl= 6;й записью в па= 084;ять и могут привести к непредсказm= 1;емым последствиn= 3;м.
При возникновеl= 5;ии исключителn= 0;ной ситуации мо = 78;но проигнорирl= 6;вать ее и запустить исполнение программы дальше, нажа= 074; F9. В этом случае программа выдает сообщение о = 73; ошибке. Необ= 093;одимо найти ошибку – понять, в какой строк = 77; и почему происходит сбой. Для этого можно воспользовk= 2;ться трассировкl= 6;й. Для того чтобы определить первую строчку, нач= 080;ная с которой будет проводитьсn= 3; трассировкk= 2;, нужно поставить Breakpoint – точку останова.
Когда исполняемыl= 1; код доходит до точки ост= 072;нова, исполнение программы приостанавl= 3;ивается, и надо перей= 090;и в режим отла= 076;ки. В режиме отладки можно исполнять последоватk= 7;льно программу п = 86; шагам, контролироk= 4;ать и изменять значения переменных = 80; т.п. Этот режим служи = 90; для обнаружениn= 3; и ликвидаци = 80; ошибок. В этом случае появляется возможностn= 0; просмотретn= 0; или изменит= 00; текущие зна = 95;ения переменных, однако изменение кода во врем= 103; отладки невозможно. Измененный текст зараб = 86;тает только посл = 77; перезапускk= 2; программы.
Чтобы выполнить текущую строку, на которой стоит курсо = 88; отладки, нажмите F7 или = F8. Строка выполниласn= 0;, и курсор сместился. Если необходимо перейти к следующей строке, то можно нажат= 00; F8, если нужно зайти в какую-либо функцию, то нажимают клавишу F7 и продолжают = 90;рассировку.<= /p>
Для того чтобы в ходе отладк = 80; узнать знач = 77;ние той или иной переменной, нужно прост = 86; подвести к ней курсор. П= 1086;явится hint со значением этой переменной.
Это, однако, работает не со всеми переменнымl= 0;, а только с доступными = 74; данный момент. Если нужно постоянно контролироk= 4;ать значение переменной, то еще проще добавить ее = 074; список Watch. Для более основательl= 5;ого слежения за значениями можете воспользовk= 2;ться Списком Наблюдения (Wat= ch List, Ctrl+F5).
Таким образом, при программирl= 6;вании среда Delphi може = 90; находиться = 74; различных режимах:
Чтобы продолжить трассировкm= 1; (последоват = 77;льный переход от команды к команде), можете воспользовk= 2;ться клавишами:
При работе в Delphi сообщение о = 73; ошибке фактически появляется дважды: сначала выводится о = 82;но об исключителn= 0;ной ситуации и программа приостанавl= 3;ивается, а потом, если нажать F9 (F8, F7 и т.п.), – возникает стандартноk= 7; сообщение о = 73; ошибке Windows.
Итак:=
Механизм обработки исключителn= 0;ных ситуаций заключаетсn= 3; в том, что есл&= #1080; произошла ошибка (1) и не надо выводить (5), пр= ;едпринимаю = 90;ся действия, чтобы (6) исполнялосn= 0; корректно. Д= 083;я этого «опас = 85;ая» команда (или целый блок) помещается внутрь конс = 90;рукции try..except..end или try..finally..end.
Блок try..finally..end используетl= 9;я аналогично try..except.., но с тем отличием, чт= 086; блок команд между finally и end выполняетсn= 3; в любом случае, вне зависимостl= 0; от того, было исключение между try и finally илl= 0; нет.