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

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


person Saviz    schedule 17.12.2010    source источник


Ответы (4)


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

person alxx    schedule 17.12.2010

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

  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. Дублируйте хэш-файл и переименуйте его в debug. Откройте файл отладки в текстовом редакторе и удалите содержимое. Готово, теперь вы получаете трассировку стека + номера строк. Windows: перейдите в каталог установки в проводнике. Перейдите к {app-folder}▸META-INF▸AIR▸. Здесь вы можете найти файл с именем hash. Дублируйте хэш-файл и переименуйте его в debug. Откройте файл отладки в текстовом редакторе и удалите содержимое. Готово, теперь вы получаете трассировку стека + номера строк.

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

Протестировано с Air 3.6!

person Stefan Habacher    schedule 04.12.2014
comment
Как бы вы ни отследили это, спасибо. Неудивительно, что Adobe загнала себя в копеечку с платформой Flash/Flex/AIR. - person Mike Petty; 09.12.2014
comment
Боюсь, это не работает. Я думаю, вы использовали отладочную сборку, и поэтому она сработала. С -debug=false вы все равно не получите номера строк, даже с этим хаком. - person b005t3r; 07.09.2016

Вариант компилятора:

compiler.verbose-stacktraces=true

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

person kpatelPro    schedule 19.09.2012
comment
вы ставите эту опцию в Настройки проекта -> Flex Compiler -> Дополнительные аргументы компилятора? Если да, ставите ли вы перед ним тире, например, -compiler.verbose-stacktraces=true или без тире? Я пробовал все возможные комбинации этого, но я все еще не получаю трассировки стека в своих сборках выпуска! - person Jason; 14.12.2012
comment
Джейсон, то же самое и в моем случае, я не смог отследить в этом режиме, мне нужно какое-то решение для этого. - person gaurav_gupta; 23.12.2013
comment
Боюсь, это не поможет. Для этого вам нужна отладочная сборка, в настоящее время я не знаю другого способа. - person b005t3r; 07.09.2016

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

person Stefan Habacher    schedule 09.12.2014