Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008 |
Базовые понятия Action Script
Отладка во Flash MX
Вы уже, наверное, успели понять, что роль отладки во Flash MX сложно переоценить. Говоря нормальным языком - отлаживать вам придется, и немало. Ведь во Flash MX компилятор почти не помогает программисту. Единственное, что он поможет выловить на уровне компиляции - это простейшие синтаксические ошибки типа несоответствия фигурных скобок или отсутствия точки с запятой. Все остальное, к сожалению, остается за вами. В этой лекции мы рассмотрим использование встроенного отладчика, а также коротко пройдемся по другим методам отладки, детально рассматриваемым в лекции "Работа флэш-программ в Internet".
Использование встроенного отладчика
Во Flash MX имеется достаточно мощный встроенный отладчик, предоставляющий различные необходимые инструменты отладки: точки останова, пошаговое выполнение программы, просмотр значений переменных и вычисление выражений ( watches ).
Для того чтобы запустить флэш-ролик под отладчиком, выберите Control / Debug Movie ( Ctrl+Shift+Enter ). Кстати, обратите внимание, что при этом создается файл с отладочной информацией (.swd-файл), без которого большинство отладочных инструментов недоступно (этот файл должен лежать в том же каталоге, что и отлаживаемый .swf-файл).
Структура отладчика
По нажатию Ctrl+Shift+Enter перед вами открывается отладчик, окно которого состоит из четырех частей (дочерних окон).
- В левом верхнем окне отображается структура клипов ролика.
- В левом среднем окне выводятся значения переменных (переменные, отображаемые в этом окне, зависят от контекста, заданного в левом верхнем окне).
- В левом нижнем окне отображается стек вызовов.
- В правом окне отображается код из контекста исполнения, выбранного в выпадающем списке, расположенном над правым окном.
- Еще выше справа располагается панель инструментов отладчика.
Панель инструментов отладчика
Панель инструментов состоит из 7 кнопок. Рассмотрим их слева направо.
Continue - начать/продолжить выполнение ролика;
Stop Debugging - прекратить отладку (дальнейшее выполнение ролика продолжается без управления отладчика );
Toggle Breakpoint - поставить/убрать точку останова ( "line" breakpoint ) в данном месте;
Remove All Breakpoints - убрать все точки останова;
Step Over - сделать шаг вперед, не заходя в функцию/метод;
Step In - сделать шаг вперед с заходом в функцию/метод;
Step Out - выйти из функции/метода и остановиться на следующем операторе.
Итак, вы запустили отладчик, теперь нужно один раз нажать на кнопку Continue для запуска ролика (поставив перед этим все необходимые точки останова) - и можно отлаживать.
Базовые принципы отладки, такие, как пошаговое выполнение и точки останова, мы детально рассматривать не будем, ибо они совершенно аналогично действуют в любой другой среде разработки, остановимся подробнее на той части отладчика, которая расположена слева.
Просмотр значений свойств, переменных клипов и стека (locals)
Если выбрать закладку Properties или Variables в левой средней части окна отладчика, то под ней можно увидеть список свойств (или, соответственно, переменных) клипа, выбранного в левой верхней части окна отладчика, а также их значений.
Выбрав закладку Locals, вы увидите список локальных переменных с указанием их значений (стек) контекста исполнения, указанного в нижнем левом окне отладчика ( Call Stack1Правда, в окно Call Stack почему-то не попадают функции, созданные так: funcName = function () {}. Если функцию определить таким образом: _root.funcName = function () {}, то она корректно отображается в окне Call Stack. Это похоже на ошибку в отладчике Флэш МХ, потому что в обоих случаях объекты функций создаются в одном и том же месте - в _root. Функции, созданные так: function funcName () {} или так: object.funcName = function () отображаются в окне Call Stack корректно. По поводу различных способов создания функций во Флэш МХ см. лекцию 5. ).
Полезный совет: не забывайте открывать (с помощью значка плюса) такие объекты, как this, чтобы увидеть значения их полей.
Вычисление выражений и корректировка их значений (watch, evaluate/modify)
Если нужно отредактировать значение свойства, переменной клипа или локальной переменной во время отладки, это можно сделать, щелкнув дважды на их текущем значении (в левом среднем окне отладчика ) и вписав новое значение.
Во Flash MX есть специальная закладка - Watch, которая позволяет наблюдать за состоянием важных для вас переменных клипов и локальных переменных. Для добавления переменных клипов и локальных переменных в закладку нажмите на имя переменной (отображаемой в закладке Variables или Locals ) правой кнопкой мыши и выберите в контекстном меню пункт Watch. Добавить переменную в окно Watch можно также, если воспользоваться пунктом Add контекстного меню этого окна. При этом в окне создается пустая строчка, в левой части которой нужно вписать имя переменной, тогда в правой части появится ее значение. Обратите внимание, что имена переменных должны быть записаны единственно правильным способом, с использованием абсолютного пути. Например, для переменной a, созданной в _root, правильным именем будет "_level0.a", но не "а" и не "_root.a". Очевидно, данное ограничение уместно только в окне Watch.
Значения переменных, отображаемые в закладке Watch, также можно изменять (просто вписывая новое значение).
Точки останова в отладчике и в программе
Следует отметить один интересный факт, касающийся точек останова: если их расставлять уже в отладчике, то они будут действительны только на протяжении данной сессии отладки. Поэтому удобнее ставить часто используемые точки останова еще при написании кода, до запуска отладчика, тогда они будут действовать на все сессии отладки.
Выбор нужного контекста выполнения
Как мы уже ранее заметили, в правой части отладчика отображается отлаживаемый код. Что делать, если нужно, например, поставить точку останова в другом контексте исполнения (например, в другом кадре или другом классе)? Для этого предназначен выпадающий список выбора контекста исполнения, в котором перечислены все элементы, содержащие код (кадры, код, ассоциированный с клипами и т. д.).
Правда, этим линейным списком очень неудобно пользоваться, если ролик большой и элементов с кодом много. В таких случаях бывает удобнее заранее расставить все необходимые точки останова перед отладкой.
Нужны ли другие методы отладки?
Это вопрос, над которым стоит задуматься. Если ваш проект небольшой, вам должно хватить возможностей встроенного отладчика. И даже если какие-то ошибки проявляются только в браузере, вы сможете воспользоваться средствами удаленной отладки. Правда, для этого вам надо будет установить отладочную версию плеера, но дело того стоит.
Однако в большом проекте могут окупиться и затраты по включению дополнительных отладочных возможностей прямо в библиотеку, которую вы для этого проекта делаете. Вы вполне можете положить поверх вашего ролика текстовую панель, которая все время скрыта, но может быть показана по нажатию какой-нибудь клавиши (например, F12 ). Получится своего рода аналог отладочной консоли. В эту консоль ваши методы (если установлена в true заведенная вами переменная "отладочный режим") могут выводить информацию о своей работе (не только об ошибках). Конечно, в вашей воле поддерживать несколько отладочных режимов с разной степенью детализации информации, выдаваемой в консоль. Опыт показывает, что в каждом кадре в консоль вполне может выдаваться не один десяток строчек, и это практически не влияет на производительность (если не хранить слишком большое количество строчек).
И, наконец, вы, конечно же, захотите протестировать ваш проект "в реальных условиях", то есть, на реальной для Интернета пропускной способности канала. Для этого можно использовать либо встроенный во Flash MX Bandwidth profiler, либо специальный веб-сервер.
Обо всех упомянутых только что методах отладки - удаленной отладке, отладочной консоли и о тестировании на канале малой пропускной способности - мы подробно расскажем в лекции "Работа флэш-программ в Internet".