Ошибки времени выполнения могут быть весьма разнообразными и свидетельствовать о проблеме, вызванной не текущим рассматриваемым кодом, а неверным результатом более ранних действий. Допустим, например, что делается попытка использования значений, возвращенных командой loadVariables( ), отправленной серверу. Если сценарий Perl, отвечающий на команду, не предоставил верных данных в правильном формате, то исправлять нужно сценарий Perl. Сценарий Flash может быть совершенно верным, но не выполниться из-за полученных неверных входных данных.
В итоге мы приходим к важной технологии - оборонительному программированию. Множество реальных и потенциальных ошибок можно избежать, если всегда проверять ситуации, чреватые проблемами, которые называют контролем ошибок (error checking) либо, иногда, проверкой данных (data validation), если это относится к вводу, производимому пользователем. Например, прежде чем выводить вопросы вопросника, можно убедиться в том, что эти вопросы правильно загрузились. Можно проверить и каждый вопрос, чтобы быть уверенным в правильности его формата для вывода. Если полученные данные были введены неверным образом, следует вывести соответствующее сообщение об ошибке, которое позволит программисту или пользователю предпринять корректирующие действия.
В ActionScript мощнейшее средство выявление ошибок является также и простейшим: это функция trace( ). Как демонстрировалось на протяжении всей этой книги, функция trace( ) направляет значение выражения в окно Output в режиме тестирования. Например, если добавить в ролик такой код:
trace("hello world");
то в окне Output появится текст "hello world". Аналогично трассируется значение переменной:
var x = 5;
trace(x); // Выводит 5 in в окно Output
С помощью функции trace( ) можно проверять состояние переменных, свойств и объектов и тем самым отслеживать ход выполнения кода. Источник проблемы часто можно обнаружить при проверке результата каждой операции сценария. Например, допустим, что некоторая функция должна возвращать значение, но с помощью команды trace( ) обнаруживается, что возвращается значение undefined (которое никак не выводиться в окно Output). В результате становится ясно, что нужно внимательно рассмотреть функцию и проверить, правильно ли в ней используется команда return для возврата осмысленного значения.
При воспроизведении Flash-ролика в режиме тестирования можно проверить значения текущих переменных, определенных в нем, с помощью команды Debug List Variables. Команда List Variables сообщает имена и местонахождение всех переменных, активных в ролике в данный момент, а также их значения. Так как функции и мувиклипы хранятся в переменных, команда List Variables показывает также функции и мувиклипы, имеющиеся в ролике.
В примере 19-1 приведен образец вывода после выполнения команды List Variables. Обратите внимание, что переменная rate показана как объявленная, но не определена undefined. Такие детали иногда трудно обнаружить с помощью функции trace( ), поскольку trace( ) преобразует значение undefined в пустую строку ("").
Level #0:
Variable _level0.$version = "WIN 5,0,30,0"
Variable _level0.calcDist = [function]
Variable _level0.deltaX = 194
Variable _level0.deltaY = 179
Variable _level0.rate = undefined
Variable _level0.dist = 264
Movie Clip: Target="_level0.clip1"
Movie Clip: Target="_level0.clip2"
Обратите внимание, что обе команды - trace( ) и List Variables - дают только мгновенный снимок. Часто требуется следить за изменением переменной во времени или проверять изменение многократно. Следить за изменениями переменных позволяет отладчик (Debugger),который будет обсуждаться позднее.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.