FlashDevelop "дополнение" или куда подевался true? (debug)

Всем привет!
Меня очень обворожила статья WeslomPo по поводу примочек FD (еще ему один плюс) по этому я решил было дополнить в коментах, но оказалось, что дополнений хватит на полноценный пост.

Как известно мне (по опыту), что разработка кода заключается на 2/3 из написания и на 1/3 из отладки. По этому на вооружение разработчиков поступает такая вещь как отладчик (debuger). Многие скажут — у нас есть Trace! Это тоже хорошо, но не всегда оправдано.

И значит отладчик. Отладкой я помню занимался еще на AS2. Правда, сам отладчик Flash IDE был очень не удобный, так как нельзя было посмотреть состояние в конкретной точке кода. Но сейчас это доступно!

Ладно, слова словами — но лучше один раз увидеть чем 100 раз услышать.
Для примера, напишем 2 небольших класса:
public class Main extends MovieClip 
{
        private var arr:Array = new Array();
        public function Main() 
        {
                for (var i:int = 0; i < 5; i++)
                {
                        arr.push(i);
                }
                trace(arr.length);
                for (i = 0; i < 5; i++)
                {
                        var mc:MovieClip = new MovieClip();
                        addChild(mc);
                        arr.push(mc);
                }
                trace(arr.length);
                for (i = 0; i < 5; i++)
                {
                        var test:Test = new Test();
                        arr.push(test);
                }
                trace(arr.length);
        }
}

И
public class Test 
{
        public var a:Number = 0;
        public var b:Boolean = false;
        public var c:String = null;
        private var d:Number = 0;
        public function Test() 
        {
                a = Math.random() * 30;
                if (Math.round(Math.random() * 10) % 2 == 0)
                {
                        b = true;
                }
                c = Number(Math.random() * 100000).toString();
                d = Math.random() * 30;
        }
}

Установим класс Main как Always Compile (в случае использования Flash IDE — Docement Class) и запустим наше приложение. В результате работы, на экране в поле Output мы увидим вывод размера нашего массива в трех точках: 5,10 и 15.

Если посмотреть на сам код, то в нем мы создаем массив и в трех циклах, добавляем в него 5 значений типа int, 5 типа MovieClip и 5 наших кастомных значений типа Test.

Но у нас есть задача — отследить что происходит внутри нашего кода в конкретный момент времени. Для этого мы включаем в верхней панели редактора режим Debug и ставим в интересующей строке/строках Breakpoint, по народному просто Бряк =). Бряк ставится в левой части экрана, перед номерами строк.

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

По порядку:
1. Ставим бряк:

2.Нажимаем Test Movie и попадаем на наш бряк. Как видно, строка, на которой остановилось выполнение программы, подкрашивается в желтоватый цвет:

3. Наводим курсов мишки на интересующий нас объект и в выпавшем списке видим перечисление значений всех свойств:

Вот примерно так все и выглядит. Но список вкуснятин на этом не заканчивается. Если мы посмотрим на верхнюю панель редактора, то увидим там, с правой стороны, активные кнопки управлением отладчика:

Первая слева кнопка (Continue), позволяет нам игнорировать наш текущий бряк и двигаться к следующему.
Вторая (Pause), как бы позволяет сделать паузу (хотя зачем она нужна, я даже не догадываюсь).
Третья (Stop) — остановка отладки.
Четвертая (Current Line) — перебрасывает вас в строку на которой находится сработавший брейкпоинт. Используется в том случае если вы забрели в недра класса.
Пятая (Run To Cursor Line) — перебрасывает вас на следующий брейкпоинт.
Шестая (Step Into) — самая полезная, она помогает двигаться построчно. Очень выручает, когда нужно отладить определенный блок.
Седьмая (Step Over) — тоже самое что и шестая, только при движении мы не заходим внутрь методов, которые вызываются в данной строке.
Восьмая (Finish) — даже не догадываюсь =). Но работает она так же как первая и пятая.

Так же отладчик имеет свои окна.
Окно Locals — отображает все локальные переменные метода, в котором вы находитесь.
Окно Stak — показывает стек иерархии классов и позиций на которых вы находитесь.
Окно Watch — самое полезное окно. В него можно добавлять свойства/объекты из выпадающего списка свойств. Таким образом, вам не придется каждый раз находить нужное вам свойство в это списке, так как оно будет отображаться в этом окне.

Окно Breakpoints — позволяет нам управлять нашими бряками. То есть включать их и выключать.

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

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

Комментарии (17)

+2
0_o я сплю или мне плохо, но в этом посте для программистов, программистам рассказывают что можно дебажить код?
  • klmv
  • klmv
0
ну типо да!
+1
То что надо, спасибо!
+1
ну во-первых не все тут программисты, а во-вторых тут много новичков, а так же есть еще люди которые недавно пересели на FD и т.д. так что твой сарказм вообще не в тему…
0
Тебе тоже понравился вишневый значек?))
0
Угу. Я надеюсь не нарушил нечьих копирайтов?
0
Думаю что нет :), ибо приложение opensource, а автор лого рисовал for-fun, возможно, даже наоборот обрадуютс тому, что мы его творчество заметили. Мы же не ради денег.
0
Ты так и не ответил на сокровенный вопрос: Куда подевался true? (:
0
Это был риторический вопрос. Чтото типа «where the spoon???» у Нео =)
0
У мя одного постоянно виснет плеер при отладке и в 80% не отвисает?
  • adzh
  • adzh
0
У меня все впорядке. Никаких глюков замечено не было.
0
У меня такое изредка происходит при каких-тонестандартных бряках, которые FD не может прожевать. Так на вскидку даже не вспомню.
0
Еще б где то можно было горячие кнопки назначить на (Step Into,Step Over) было б супер
+2
Tools -> Settings -> FlashDebugger -> Shortcuts -> PROFIT
0
О спасибо!
0
Коллеги, подскажите как в FD можно сохранить изменненное расположение окон? Мне например несколько не нужно, но при каждом дебаге они заново восстанавливаются.
0
Там есть закладка Layouts
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.