Я работаю над крупномасштабным проектом AS3 / Flex с двумя размерами (некоторые части - чистый AS3, другие - Flex), и я испытываю много сбоев Flash Debugger.
Эти сбои не являются полностью случайными - кажется, что я могу добиться их большей согласованности при выполнении определенных действий в моем приложении. Однако, в то же время, они не всегда повторяются - иногда набор действий приводит к сбою моего приложения, а в других случаях те же шаги выполняются без сбоев.
У меня есть два вопроса (тщательно сформулируйте, чтобы убрать мой личный уклон :))
Это сбои из-за моих методов кодирования или Adobe Flash Flash Debugger?
1a. Если эти сбои связаны с моим кодированием, как мне решить проблемы, которые не всегда повторяются? : P
Когда я разверну свое приложение на веб-сайте и получу к нему доступ через Flash Player, стоит ли ожидать таких же сбоев или Flash Player значительно более устойчив, чем Flash Debugger?
Большое спасибо всем! :)
-Rich
UPDATE:
Спасибо за ответы, все! Еще немного справочной информации:
Я использую довольно хороший DeMonster Debugger (http://demonsterdebugger.com/), а также доморощенный класс Profiler для мониторинга нагрузки памяти / процессора моего приложения. Я достаточно уверен, что сбои не связаны к нагрузке на память / процессор, потому что я могу (несколько последовательно) заставить приложение аварийно завершить работу с минимальной нагрузкой в течение 30 секунд после запуска.
Из-за архитектуры моего приложения утечки памяти становятся очевидными довольно легко. Поэтому я был в состоянии / вынужден устранить по крайней мере большинство утечек памяти. Хотя я признаю, что, вероятно, все еще присутствуют утечки памяти, использование памяти тривиально низкое в тот момент, когда я могу вызвать сбой приложения, поэтому вряд ли это будет связано.
Теперь некоторые подробности о фактическом коде нарушения:
Механизм отмены приложения (XMLManager.as) работает путем сохранения изменений в модели (представленной в XML). Чтобы отменить изменение, приложение перезагружает (восстанавливает) ключевые компоненты на основе XML, хранящегося в XMLManager.as. Чтобы приложение (несколько последовательно) зависало, я могу выполнить набор действий, которые все связаны с определенным классом в приложении, классом Line.as. Выполнение действий не вызывает проблем, но отмена () их вызывает сбой приложения.
Самая запутанная часть этого заключается в том, что XML, хранящийся в классе XMLManager, фактически идентичен в сценарии сбоя и в сценарии без сбоев. Еще один запутанный аспект заключается в том, что сценарий сбоя представлен только одной строкой:
xml + = 'text = "' + text + '"'; // не приводит к сбою
xml + = 'text = "' + tf.text + '"'; // приводит к сбою
'text' - это строка, которая должна отражать содержимое tf.text (tf - это TextField). Эта строка находится в Line.toXml (), методе, который используется для преобразования строки в соответствующий XML-файл для хранения в XMLManager. Итак, запутанная вещь во всем этом заключается в том, что использование tf.text в конечном итоге приводит к сбою в механизме отмены, даже если XML, хранящийся в механизме XML, существенно не изменился ...
Чтобы сделать вещи еще более запутанными, я могу вывести полный XML перед началом процесса отмены. Таким образом, когда происходит сбой Flash, у меня есть запись XML, которая вызвала его сбой. Если я возьму тот же самый XML (который при ручной проверке кажется нормальным) и верну его обратно в приложение в качестве исходного состояния, ошибок не будет, и Flash не вылетит.
Столько путаницы! :)
Извините за длинное объяснение; возможно, вы поймете, почему я здесь в недоумении!
(Обратите внимание, что я нашел обходной путь - вместо использования «tf.text» непосредственно в коде кода toXml (), я могу поддерживать «текст» в актуальном состоянии с содержимым «tf.text» в все время. Этот подход, который теоретически приводит к использованию того же XML, работает без сбоев ...)
Есть мысли?