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

Имаме доста голямо Flex приложение и нашият QA получаваше произволни, но възпроизводими грешки, които разработчиците на Flex не можаха да възпроизведат. Някои от тези грешки бяха изхвърлени от версията за отстраняване на грешки на флаш плейъра, като например:

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 срещу -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 Debug.

Също така, любопитен съм защо Parsley трябва да знае за компонентите на изгледа. Използвате ли маркера Configure? Препоръчвам ви да не го използвате, а вместо това да използвате FastInject с подходящи модели на презентатори, което е по-добро за тестване. Configure означава, че Parsley трябва да отразява всички свойства във вашия изглед, което е безполезно и отнема време. Гарантирам, че ако използвате FastInject вместо Configure, проблемът ви ще изчезне. Това е освен ако не се опитвате да инжектирате изглед в компонент, което не трябва да правите. Ако случаят е такъв, ще трябва да проектирате приложението си по по-добър начин.

person J_A_X    schedule 28.06.2011
comment
Благодаря, това помогна. Изглежда, че включеното автоматично окабеляване е основният проблем. Като се отървахме от автоматичното окабеляване и използвахме Configure и FastInject (в зависимост от това дали използвахме функциите за съобщения на Parsley), проблемът изглежда изчезна. Все още съм любопитен защо виждахме тази грешка само когато флагът на компилатора за отстраняване на грешки беше false. - person vershun; 30.06.2011
comment
Не мога да коментирам, без да видя повече код, но имам скрито подозрение, че не използвате правилно магданоз. - person J_A_X; 30.06.2011
comment
Това определено може да е така. Това всъщност не е проблем, тъй като вече не използваме автоматично окабеляване, но за любопитните страни успях да възпроизведа това в много малък проект, използвайки диаграма с площи, предоставена от пример на Adobe, и контекст, съдържащ изглед, който е диаграмата родител. vershun.com/projects/flexdebugbug/Test.fxp Ако го стартирате след import ще видите, че извежда грешката. Редактирането на флаговете на компилатора и настройката на debug на true ще скрие грешката. Най-доброто ми предположение досега е, че режимът за отстраняване на грешки не уважава обхвата по същия начин, както компилираните swfs без отстраняване на грешки. - person vershun; 06.07.2011
comment
@vershun, Parsley не е създаден да инжектира (и отразява) компоненти на изглед. Това е цялата причина, поради която магданозът съществува, е да отделя гледната точка от бизнеса. Ако имате изглед в конфигурацията си, трябва да го премахнете. Мисля, че проблемът ви е във времето, тъй като режимът за отстраняване на грешки е „по-бавен“ за инициализиране. - person J_A_X; 06.07.2011