К сожалению, на данный момент мало что можно сделать.Разумеется, очевидным местом для начала будет попытка заставить пользователя запустить программу на отладочной версии Flash Player.Но если вы не можете, и вам нужно найти способ «встроить» обнаружение ошибок во время выполнения «всеобъемлющим» способом, есть только два немедленных способа устранения:
Вставка сообщений журнала по умолчанию в критических точках вашего приложения.Это должно быть на более высоком уровне абстракции, возможно, при создании или удалении модулей или при запуске и завершении сложных задач.В идеале, протоколирование также должно быть настраиваемым, чтобы вы могли включать или выключать подробный вывод, когда вам это нужно, например, изменяя файл конфигурации или устанавливая переменную среды во время компиляции - отладочный код может немного замедлить ваше приложение, ивам не нужно добавлять и удалять отдельные операторы трассировки каждый раз, когда вы получаете ошибку.Если вы продвинутый разработчик ActionScript, вам может даже понадобиться найти способ реализовать ведение журнала с помощью метаданных и / или пользовательских пространств имен - это гораздо более чистый подход.
Применение универсальный подход ко всему вашему приложению и отслеживание стека для каждой обнаруженной ошибки.Возможно, это может быть не так явно, как то, что у вас уже есть, но, по крайней мере, вы можете аккуратно завершить работу программы (например, показав сообщение пользователю) вместо того, чтобы просто дать ей вылететь.
К сожалению, вы уже создали свою программу с отношением «не говорите мне проверять, прежде чем я отпущу» - просто не так много вещей, которые вы можете сделать «задним числом», кроме как запуститьотладчик и вставил несколько дополнительных часов.На самом деле, вы должны тестировать каждую строку кода , прежде чем даже написать ее ... но я не буду вдаваться в подробности - TDD обычно требует большего объяснениячем один ответ.
Вот несколько простых вещей, которые вы можете сделать, чтобы облегчить себе жизнь в будущем:
Самая большая ошибка, которую обычно делают люди, - это не допустить, чтобы ошибки возникали в первую очередь : Если, например, у вас есть много null
-проверок в коде приложения:
if (myVar != null) doMyStuff(); // or
if (myVar == null) return;
, это обычно используется для предотвращения появления ужасной ошибки # 1009, это относительно эффективно, и вНа первый взгляд это быстрее, чем использование блока try...catch
.Но это также затеняет корень проблемы или даже оставит ее незамеченной: ваша ошибка может появиться позже, когда что-то еще должно было быть инициализировано в doMyStuff()
, или может бытьместа, где вы просто забыли проверить.
Лучшая стратегия, позволяющая избежать ошибок:
Никогда не возвращать и не присваивать недопустимые значения (например, donне позволяйте вашим функциям возвращать null
, присваивать начальные значения всем переменным и т. д.)
Реализация try...catch
блоков в критических точках в приложении (всякий раз, когда что-то может пойти не так, по существу).Затем они отправляют подробные сообщения журнала при обнаружении ошибок, и поэтому вы можете легко определить причину, не прибегая к длительным сеансам отладки.
Создание самопроверяющихся объектов.Мне нравится иметь метод verify()
, который вызывается до того, как объект инициализирован или добавлен на сцену, проверяет все необходимые зависимости - и выдает InstantiationException
, если что-то отсутствует или имеет неправильное значение.