Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание метода для отладочной версии Flash Player (http://www.flasher.ru/forum/showthread.php?t=156638)

HardCoder 25.05.2011 01:22

Создание метода для отладочной версии Flash Player
 
Здравствуйте! Например, нужно создать метод, который работал бы лишь при тестировании в среде разработки. Можно ли средствами AS3 отследить тестируется swf в некой среде разработки (Flash IDE, FB, FD...), или автономно? Тоесть нужно чтоб данный метод работал только при отладке swf, но не в случае "готового приложения" (будь то в браузере, или проекторе).

iNils 25.05.2011 01:29

Класс flash.system.Capabilities, свойство isDebugger:Boolean
Цитата:

Показывает, использует система специальную отладочную программу (true) или официально выпущенную версию (false).

gloomyBrain 25.05.2011 01:33

Можно помещать код в блоки вида
Код AS3:

CONFIG::debug {
trace("Debug mode detected");
}
CONFIG::release {
// мы в релизе, ничего не делаем
}

При таком раскладе, если вы собираете проект под релиз, часть кода для дебага вообще не появится в результирующем swf-файле (правда про работоспособность такого метода в Flash IDE я ничего сказать не могу)

HardCoder 25.05.2011 01:53

Вот это круто! Спасибо всем за помощь!
PS: gloomyBrain, в Adobe Flash CS5 не работает, но в FD - как по маслу!

Добавлено через 9 минут
Только ни один из вариантов не работает в проекторе. Да мне в проекторе и не надо - этого хватит :)

wvxvw 25.05.2011 10:52

В FD эти константы времени компиляции определены, и он их сам будет задавать в зависимости от того, компилируете ли вы релиз или версию для отладчика. Флеш их сам не задает (или, мне кажется, что последние версии это делали, но я не уверен). Изначально это фича флексового СДК, но, по-моему, в последнем флеше тоже есть, поищите в настройках компиляции.

HardCoder 25.05.2011 12:16

Такой фичи не нашел (по крайней мере в CS5). Но зато нашел возможность создания CONFIG констант в настройках публикации. В целом штука удобная. Но в моем случае не подходит, так как вручную надо задавать в publish settings моей константе: true или false в зависимости от цели: релиз/дебаг. Я пишу что-то на подобии движка или фреймворка для себя. Но хочется максимально "комфортабелизировать" :). Тоесть, если когда-нибудь другие люди будут мое "ноу-хау" использовать, то чтоб они не заморачивались в настройках публикации. И чтоб были уверены, что куски кода, предназначенные для теста не будут вкомпилированы в swf (независимо - это Flash IDE или Flex). Так что в моем случае, воспользуюсь Capabilities.

alatar 25.05.2011 13:24

Цитата:

И чтоб были уверены, что куски кода, предназначенные для теста не будут вкомпилированы в swf (независимо - это Flash IDE или Flex). Так что в моем случае, воспользуюсь Capabilities.
Что-то у вас одно с другим не вяжется. При таком подходе весь код, будет всегда компилироваться в swf. Другое дело, что запускаться не будет. В отличие от констант времени компиляции.

HardCoder 25.05.2011 14:28

alatar, я так понял из прочтенной статьи: http://www.richnetapps.com/flash-cs4...nal-compilati/
Цитата:

...since potentially big chunks of code won’t be included at all in the compiled code.
Перечитал еще раз. Выходит, что во flash IDE:
1) при создании некой константы DEBUG:Boolean в коде, и проверке ее:
Код AS3:

if(DEBUG){
  myMethod();
}

то функция myMethod() будет встроена в swf.
2) Также, если в настройках публикации добавить CONFIG::DEBUG - true и в коде
Код AS3:

function conditionals():void
{
  CONFIG::DEBUG
  {
    myMethod();
  }
}

то функция myMethod() снова таки будет встроена в swf.
3) А если в настройках публикации добавить CONFIG::DEBUG - false и в коде
Код AS3:

function conditionals():void
{
  CONFIG::DEBUG
  {
    myMethod();
  }
}

то функция myMethod() yt будет встроена.
Это вывод из прочтенной инфы по ссылке выше. Я все правильно понял?

Jewelz 25.05.2011 14:33

Цитата:

Сообщение от HardCoder (Сообщение 998605)
Я все правильно понял?

правильно

HardCoder 25.05.2011 14:52

А в FD тогда как? Если напишу:
Код AS3:

CONFIG::debug{
  myMethod();
}

То myMethod() не будет встроен в swf или он присутствовать будет, но не будет выполнятся?
Интересно, интересно...
Тогда выходит что с помощью Capabilities.isDebugger нельзя "выкинуть" тестовый код из swf. Трагедия, трагедия...

alatar 25.05.2011 15:04

Цитата:

То myMethod() не будет встроен в swf или он присутствовать будет, но не будет выполнятся?
не будет выполняться. Если написать:
Код AS3:

CONFIG::DEBUG
private function conditionals():void
{
}

то conditionals не попадет в релизный код.

HardCoder 25.05.2011 15:43

Даже так...
Но все равно, похоже моему коду не дано бить "универсальным". Обойдусь пока проверкой isDebugger. Пусть моя функция сидит себе в swf, она же в браузере не будет работать, а несколько байт кода думаю не многих уж очень спасет. Спасибо всем.

iNils 25.05.2011 16:17

HardCoder, вы определитесь что вы именно хотите.
Есть:
1. Вариант плеера:
- Release
- Debug

2. Вариант swf
- Release
- Debug

Итого получается 4 комбинации:

Release (player)-Release (swf)
Release (player)-Debug (swf) - Сработает isDebugger
Debug (player)-Release (swf) - Сработает CONFIG::DEBUG
Debug (player)-Debug (swf) - Сработает isDebugger + CONFIG::DEBUG

HardCoder 25.05.2011 17:29

Скурил 2 сигареты и кажется понял.
Мне нужно чтоб моя функция:
Release (player)-Release (swf) - не работала
Release (player)-Debug (swf) - не работала
Debug (player)-Release (swf) - не работала
Debug (player)-Debug (swf) - работала
Четвертый вариант должен реализовываться одинаково как во Flash CS5 так и в FlashDevelop 3.
Из вариантов: isDebugger и CONFIG::DEBUG выбрал isDebugger.
От CONFIG::DEBUG сознательно отказался, так как требует предварительной настройки в Flash CS5.
Вывод: жаль что не могу использовать Debug (player)-Debug (swf) - CONFIG::DEBUG. Потому что в этом случае код будет не только "не работать" в Release (player), но он еще и не вкомпилится в Release (swf), чего не сможет сделать isDebugger.
Вот и все...
Офтоп: как убирать эти смайлики?

iNils 25.05.2011 17:59

Цитата:

Офтоп: как убирать эти смайлики?
поместить текст в теги [noparse][/noparse]


Часовой пояс GMT +4, время: 14:32.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.