Anthill Game Framework

Tiny framework for creating Flash games.

Инструменты пользователя

Инструменты сайта


guide:debug_leaks

Отслеживание утечек в памяти

В состав отладочных инструментов Anthill так же входит простой и интересный класс AntMemory, позволяющий отслеживать возможные утечки памяти1) в ваших проектах.

Часто во время разработки возникают мысли о том, что в нашем проекте могут быть «утечки», и это далеко не параноидальные мысли. Так как такое легко может случиться, даже если мы внимательны и всегда зануляем2) ссылки на удаленные объекты. Мы обычные люди и нам свойственно ошибаться. Только вот такие, порой незначительные ляпы и недочеты в долгосрочной перспективе могут пагубно сказаться на результате.

Класс AntMemory поможет быть нам уверенными на все 100%, что объекты, которые вы навсегда освобождаете — корректно обрабатываются сборщиком мусора. Использовать данный класс очень легко. Если вы заподозрили какой-либо объект в том, что он остается в памяти и никогда от туда не удаляется, просто добавьте его в трэкер, например таким образом:

AntG.track(myObject, "Some label for the object.");

Первым аргументом мы указываем непосредственно сам объект, за удалением которого желаем проследить, а вторым аргументом можем задать текстовую метку для него. Текстовые метки помогают идентифицировать объекты в выводимых результатах среди себе подобных. Например, добавляя несколько кнопок, мы можем указать их имена: «Play», «Scores» и т.п., и если какая-либо из этих кнопок не удалится, то мы будем точно знать, какая именно кнопка застряла, посмотрев на её метку.

Когда настало время — время, когда объект был удален из приложения, — для того, чтобы проверить корректность его удаления, откройте консоль и наберите команду -gc — данная команда заставит класс AntMemory принудительно активировать3) сборщик мусора и после этого проанализировать объекты, которые остались в трэкере, после чего в консоль будет выведен список всех подозрительных объектов, которые были добавлены в трэкер и по каким-либо причинам до сих пор не удалены.

Команда -gc имеет поддержку аргументов при помощи которых можно указать, какие строки необходимо подсветить при выводе результатов. Данная возможность может оказаться очень полезной, если в трэкере у вас находится невероятно много объектов, и подсветка поможет вам быстро находить и анализировать интересующие вас объекты. Чтобы подсветить интересующие вас строчки в результатах, просто укажите ключевое слово, которое должно быть подсвечено при выводе результата, например -gc AntActor, или любое другое которое может быть в указанных вами метках при добавлении объекта в трэкер.

Например, при вызове команды: -gc AntButton Play — в качестве результата будут подсвечены все строки, которые содержат слова 'AntButton' или 'Play'.


1) Утечка памяти — это когда после удаления какого-либо объекта из игрового процесса навсегда, выделенная память под этот объект не освобождается. То есть объект продолжает свое существование в экосистеме программы, возможно не выполняя функции, но по прежнему занимая драгоценную память и, возможно, процессорное время.
2) Зануляем — присваиваем переменной, хранящей указатель на объект, значение null.
3) Принудительная активация сборщика мусора работает только в Debugger Flash Player.
guide/debug_leaks.txt · Последние изменения: 11.05.2013 00:04 — Илья Уткин