Компиляция Flex (Flash Builder 4) с параметром debug=false приводит к ошибкам, которые не возникают, если параметр debug=true

У нас есть довольно большое приложение Flex, и наш QA получал случайные, но воспроизводимые ошибки, которые разработчики Flex не могли воспроизвести. Некоторые из этих ошибок возникали из отладочной версии flash player, например:

ReferenceError: Specified ApplicationDomain does not contain the class ::LineSeriesLegendMarker
    at org.spicefactory.lib.reflect::ClassInfo$/getClassDefinitionByName()
    at org.spicefactory.lib.reflect::ClassInfo$/getClassInfo()
    at org.spicefactory.lib.reflect::ClassInfo$/forInstance()
    at org.spicefactory.parsley.core.view.impl::DefaultViewConfigurator/getDefinitionByType()
    at org.spicefactory.parsley.core.view.impl::DefaultViewConfigurator/getDefinition()
    at org.spicefactory.parsley.core.view.handler::ViewAutowireHandler/processAutowireEvent()
    at org.spicefactory.parsley.core.view.util::ContextAwareEventHandler/handleEvent()
    at org.spicefactory.parsley.core.view.handler::ViewAutowireHandler/handleAutowireEvent()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at org.spicefactory.parsley.core.view.handler::ViewAutowireHandler/prefilterView()
    at flash.display::DisplayObjectContainer/addChildAt()
    at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::$addChildAt()
    at mx.core::Container/addChildAt()
    at mx.core::Container/addChild()
    at mx.charts::Legend/addLegendItem()
    at mx.charts::Legend/populateFromArray()
    at mx.charts::Legend/commitProperties()
    at mx.core::UIComponent/validateProperties()
    at mx.managers::LayoutManager/validateProperties()
    at mx.managers::LayoutManager/doPhasedInstantiation()
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()

Другие ошибки включают неправильное заполнение полей со списком и то, что кажется просто общими проблемами синхронизации.

Я хотел бы подчеркнуть, что мы сузили это до нашего основного SWF без каких-либо других переменных, кроме параметра mxmlc -debug=true vs -debug=false. Кто-нибудь еще сталкивался с этим или знает, почему сборки приводят к другому поведению?


person vershun    schedule 22.06.2011    source источник
comment
Вы случайно не используете SWFLoader ?   -  person Ranhiru Jude Cooray    schedule 23.06.2011
comment
Мы использовали ModuleLoader для этого приложения.   -  person vershun    schedule 30.06.2011


Ответы (1)


Вам придется показать больше кода, чем это; в основном ваша конфигурация петрушки.

Разница между debug=true и debug=false заключается в том, что debug=true не будет отслеживать ошибки в конечном продукте. Ваши разработчики должны всегда работать с параметром debug=true и иметь установленную программу отладки Flash Player.

Кроме того, мне любопытно, почему Parsley нужно знать о компонентах представления. Используете ли вы тег Configure? Я рекомендую вам не использовать его, а вместо этого использовать FastInject с соответствующими моделями презентаторов, что лучше для тестируемости. Настройка означает, что Parsley должен отражать все свойства в вашем представлении, что бесполезно и отнимает много времени. Я гарантирую, что если вы будете использовать FastInject вместо Configure, ваша проблема исчезнет. Это если вы не пытаетесь внедрить представление в компоненты, чего делать не следует. Если это так, вам нужно лучше спроектировать приложение.

person J_A_X    schedule 28.06.2011
comment
Спасибо, это помогло. Похоже, что автопроводка была включена как основная проблема. Избавившись от автоматического связывания и используя Configure и FastInject (в зависимости от того, использовали ли мы функции обмена сообщениями Parsley), проблема, казалось, исчезла. Мне все еще любопытно, почему мы видели эту ошибку только тогда, когда флаг отладочного компилятора был ложным. - person vershun; 30.06.2011
comment
Я не могу комментировать, не видя больше кода, но у меня есть подозрение, что вы неправильно используете петрушку. - person J_A_X; 30.06.2011
comment
Это определенно может быть так. На самом деле это не проблема, так как мы больше не используем автоматическое связывание, но для любознательных мне удалось воспроизвести это в очень небольшом проекте, используя диаграмму с областями, предоставленную примером Adobe, и контекст, содержащий представление, которое является диаграммой. родитель. vershun.com/projects/flexdebugbug/Test.fxp Если вы запустите его после import вы увидите, что он выдает ошибку. Редактирование флагов компилятора и установка для отладки значения true скроют ошибку. Мое лучшее предположение на данный момент заключается в том, что режим отладки не учитывает область видимости так же, как это делают неотладочные скомпилированные SWF-файлы. - person vershun; 06.07.2011
comment
@vershun, Parsley не предназначена для внедрения (и отражения) компонентов представления. Вот и вся петрушка существует, чтобы отделить представление от бизнеса. Если у вас есть представление в конфигурации, вы должны удалить его. Я думаю, что ваша проблема связана со временем, поскольку режим отладки «медленнее» инициализируется. - person J_A_X; 06.07.2011