Как получить трассировку стека для глобальных ошибок времени выполнения Adobe AIR в режиме без отладки? - PullRequest
2 голосов
/ 17 декабря 2010

Новая версия AIR дает нам возможность глобально фиксировать ошибки времени выполнения и обрабатывать их.Проблема в том, что у него нет трассировки стека или какой-либо полезной информации об ошибке, кроме идентификатора ошибки, сообщения об ошибке и имени.Например, он может сказать мне, что произошло исключение нулевого указателя, но он не скажет мне, где или какой метод или что-то еще.Отладочная версия среды выполнения дает нам все это, но когда приложение развертывается для клиентов, оно не запускается в отладочной версии, поэтому никакая полезная информация недоступна.Мне было интересно, есть ли у этой группы какие-либо предложения о том, как включить лучшую регистрацию ошибок в приложении AIR для лучшей поддержки продукта.Есть предложения?

Ответы [ 4 ]

5 голосов
/ 04 декабря 2014

У меня есть небольшой взлом, чтобы получить номера строк.:)

  1. сделать слушателя, чтобы получить необработанные ошибки.Я делаю это в своем основном классе:

    private function addedToStageHandler(event:Event):void {
        loaderInfo.uncaughtErrorEvents.addEventListener( UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler );
    }
    
  2. например, мой слушатель с 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" );
    }
    
  3. Добавить дополнительный компиляторАргумент: -compiler.verbose-stacktraces=true

  4. Создайте сборку выпуска.
  5. Теперь небольшой взлом: Mac: перейдите в папку установки, где у вас есть файл .app.Щелкните правой кнопкой мыши и выберите Показать содержимое пакета.Перейдите к содержанию ▸ Ресурсы ▸ META-INF ▸ AIR.Там вы можете найти файл с именем hash.Дублируйте хеш-файл и переименуйте его для отладки.Откройте файл отладки в текстовом редакторе и удалите содержимое.Готово, теперь вы получаете трассировку стека + номера строк.Windows: перейдите в каталог установки в проводнике.Перейдите к {app-folder} «META-INF▸AIR».Здесь вы можете найти файл с именем hash.Дублируйте хеш-файл и переименуйте его для отладки.Откройте файл отладки в текстовом редакторе и удалите содержимое.Готово, теперь вы получаете трассировку стека + номера строк.

Если вы не можете найти хеш-файл, просто создайте пустой файл без расширения файла и назовите его отладочным.

Протестированос воздухом 3.6!

1 голос
/ 19 сентября 2012

Опция компилятора:

compiler.verbose-stacktraces=true

должна встраивать информацию стека даже в неотлаженную сборку.

1 голос
/ 17 декабря 2010

Нет, пока новая версия AIR не поддержит его.Это не из-за проблем с производительностью, что делает глобальный обработчик практически бесполезным.Я тоже этого жду, потому что альтернатива - это записывать все самостоятельно, а это очень много времени.

0 голосов
/ 09 декабря 2014

О параметре компилятора.Я разрабатываю с IntelliJ IDEA 14. В моих вариантах сборки у меня также есть «Создать отладочный SWF».Может быть, это причина, почему это работает.Проверьте мое приложение.Греттингс enter image description here

...