Как получить сообщение об ошибке и трассировку стека, когда вы используете обычную версию (не отладочную версию) flash player в actionscript? - PullRequest
3 голосов
/ 20 сентября 2011

Я хочу регистрировать ошибки моего приложения флэш-памяти после того, как я выпустил его.
Я сохраню журналы файлов на веб-сервере.

Знаете ли вы, как получить сообщение об ошибке и отслеживать стек, когдаВы используете обычную (не отладочную версию) флеш-плеер?

Ответы [ 2 ]

2 голосов
/ 05 декабря 2012

Насколько я могу судить, нет способа получить трассировку стека из релизной версии Flash Player до версии 11.5.Тем не менее, 26.09.2012 Flash Player бета 11.5 добавил рудиментарную трассировку стека в релиз-плеер.При его использовании Error.getStackTrace сообщает класс и функцию, в которую была брошена ошибка, но не включает путь к классу или строку.

Объявление: http://forums.adobe.com/message/4732775

Пример использования: http://renaun.com/blog/2012/09/getting-the-stack-trace-in-a-release-flash-player/

Если вы хотите получить трассировки стека из релизного SWF-файла (не созданного с debug = true) с использованием отладочных Flash-плееров до бета-версии 11.5, вы можете создать свое приложение, используя флаг "-compiler.verbose-stacktraces».

1 голос
/ 20 сентября 2011

Журналирование на стороне клиента

Если вы хотите получить доступ к средствам отладки в браузере (а не в Flash Debugger), существует несколько вариантов.

Самый простой вариант - загрузить расширение браузера , и продолжаю использовать trace.

Я выполняю кучу браузерных проверок, поэтому я использовал пользовательскую функцию log в своем пакете Utils дляполучить доступ к консоли JS:

log.as

package com.zzzzbov.utils
{
  import flash.external.ExternalInterface;

  public function log(... args):void
  {
    CONFIG::DEBUG
    {
      trace(args);
      if (loggingEnabled && ExternalInterface.available)
      {
        try
        {
          if (init === null)
          {
            init = ExternalInterface.call('eval', 'if(window.flashlog){false;}else{window.flashlog=function(){if(window.console&&console.log){if(console.log.apply){console.log.apply(console,arguments);}else{for(var i=0;i<arguments.length;i++){console.log(arguments[i]);}}}};true;}');
          }

          if (init)
          {
            var values:Array = new Array('flashlog');
            ExternalInterface.call.apply(ExternalInterface, values.concat(args));
          }
        }
        catch (e:Error)
        {
          //nothing really can be done
        }
      }
    }
  }
}

init.as

package com.zzzzbov.utils
{
  internal var init:* = null;
}

loggingEnabled.as

package zfl.utils
{
  internal var loggingEnabled:Boolean = true;
}

Естьмного вещей, которые можно улучшить, и несколько вещей, которые необходимы для использования этой функции.Вам нужно определить CONFIG :: DEBUG, кроме того, вы захотите добавить прослушиватель событий на сцену для Event.ACTIVATE и Event.DEACTIVATE, чтобы включить или выключить loggingEnabled, чтобы предотвратить сбой флэш-памяти.Вам также нужно будет предоставить доступ к сценариям для флэш-видео.

Регистрация на стороне сервера

Если вы хотите регистрировать сообщения на сервере с помощью Flash, отправьте простой URL-запрос с помощьюURLLoader передает сообщение в качестве параметра серверному сценарию.Вызываемый сценарий регистрации должен быть написан на серверном языке, таком как PHP или ASP.NET.

Необходимо соблюдать осторожность при проверке подлинности запроса от Flash для предотвращения злонамеренного доступа (вы не захотитекто-то вводит некоторый исполняемый код в вашу файловую систему).

...