2011-06-22 2 views
2

У нас довольно большое приложение Flex, и наши QA получают случайные, но воспроизводимые ошибки, которые разработчики Flex не могли воспроизвести. Некоторые из этих ошибок были выброшены из флэш-плеера отладочной версии, такие как:Компиляция Flex (Flash Builder 4) с debug = false, приводящая к ошибкам, которые не возникают, когда debug = true

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() 

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

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

+0

Вы случайно используете 'SWFLoader'? –

+0

Мы использовали ModuleLoader для этого приложения. – vershun

ответ

0

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

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

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

+0

Спасибо, это помогло. Кажется, что аутсорсинг был главной проблемой. Избавляясь от autowiring и используя Configure и FastInject (в зависимости от того, были ли мы использованы функции обмена сообщениями Parsley), проблема, похоже, исчезла. Мне все еще интересно, почему мы видели эту ошибку только тогда, когда флаг компилятора debug был ложным. – vershun

+0

Я не могу комментировать, не видя больше кода, но у меня есть подозрительное подозрение, что вы не используете петрушку правильно. –

+0

Это может быть так. Это не проблема, поскольку мы больше не используем autowiring, но для любопытных сторон я смог воспроизвести это в очень маленьком проекте, используя диаграмму области, представленную примером Adobe, и контекст, содержащий представление, которое представляет собой диаграмму родитель. http://www.vershun.com/projects/flexdebugbug/Test.fxp Если вы запустите его после импорта, вы увидите, что он выдает ошибку. Редактирование флагов компилятора и установка отладки в true скроют ошибку. До сих пор я догадываюсь, что режим отладки не оправдывает определение так же, как и не отлаживаемые скомпилированные swfs. – vershun

Смежные вопросы