Новая версия AIR дает нам возможность глобально фиксировать ошибки времени выполнения и обрабатывать их. Проблема в том, что у него нет трассировки стека или какой-либо полезной информации об ошибке, кроме идентификатора ошибки, сообщения об ошибке и имени. Например, он может сказать мне, что произошло исключение нулевого указателя, но не скажет мне, где, какой метод или что-то еще. Отладочная версия среды выполнения дает нам все это, но когда приложение развертывается для клиентов, оно не работает в отладочной версии, поэтому никакая полезная информация недоступна. Мне было интересно, есть ли у этой группы какие-либо предложения о том, как улучшить регистрацию ошибок в приложении AIR для улучшения поддержки продукта. Какие-либо предложения?
Как получить трассировку стека для глобальных ошибок среды выполнения Adobe AIR в режиме без отладки?
Ответы (4)
Ни в коем случае, пока новая версия AIR не поддерживает это. Сейчас этого не происходит из-за проблем с производительностью, что делает глобальный обработчик практически бесполезным. Я тоже этого жду, потому что альтернатива — логировать все самому, а это очень долго.
У меня есть небольшой хак, чтобы получить номера строк. :)
сделать прослушиватель, чтобы получить неперехваченные ошибки. Я делаю это в своем основном классе:
private function addedToStageHandler(event:Event):void { loaderInfo.uncaughtErrorEvents.addEventListener( UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler ); }
например, мой слушатель с
error.getStackTrace()
:private function uncaughtErrorHandler( event:UncaughtErrorEvent ):void { var errorText:String; var stack:String; if( event.error is Error ) { errorText = (event.error as Error).message; stack = (event.error as Error).getStackTrace(); if(stack != null){ errorText += stack; } } else if( event.error is ErrorEvent ) { errorText = (event.error as ErrorEvent).text; } else { errorText = event.text; } event.preventDefault(); Alert.show( errorText + " " + event.error, "Error" ); }
Добавьте дополнительный аргумент компилятора:
-compiler.verbose-stacktraces=true
- Создайте сборку релиза.
- теперь небольшой хак: Mac: перейдите в место установки, где у вас есть файл .app. Щелкните правой кнопкой мыши и выберите «Показать содержимое пакета». Перейдите в раздел Содержание ▸ Ресурсы ▸ META-INF ▸ AIR. Там вы можете найти файл с именем hash. Дублируйте хэш-файл и переименуйте его в debug. Откройте файл отладки в текстовом редакторе и удалите содержимое. Готово, теперь вы получаете трассировку стека + номера строк. Windows: перейдите в каталог установки в проводнике. Перейдите к {app-folder}▸META-INF▸AIR▸. Здесь вы можете найти файл с именем hash. Дублируйте хэш-файл и переименуйте его в debug. Откройте файл отладки в текстовом редакторе и удалите содержимое. Готово, теперь вы получаете трассировку стека + номера строк.
Если вы не можете найти хэш-файл, просто создайте пустой файл без расширения и назовите его отладкой.
Протестировано с Air 3.6!
Вариант компилятора:
compiler.verbose-stacktraces=true
следует встраивать информацию о стеке даже в неотладочную сборку.
Про вариант компилятора. Я разрабатываю с помощью IntelliJ IDEA 14. В моих параметрах сборки также есть «Создать отлаживаемый SWF». Может быть, поэтому он работает. Проверьте мое вложение. Греттингс