Есть ли в ActionScript эквивалент «дампа ядра»? - PullRequest
8 голосов
/ 21 августа 2011

Вот моя ситуация: я работаю над игрой для AS3, и я хотел бы получить «Сообщить о проблеме!» функция в игре, чтобы пользователи могли оставлять отзывы.

Когда мой пользователь сообщает о проблеме, я хотел бы получить как можно больше информации о состоянии его игры; в основном, какие объекты находятся в памяти, каковы значения всех этих переменных внутри всех этих объектов; по сути, ту же информацию, которую я могу получить, когда достигаю точки останова в отладчике.

Есть ли простой способ сделать это? Я боюсь, что потрачу несколько дней, пытаясь написать набор функций, которые получают всю эту информацию для меня, только чтобы потом кто-нибудь сказал мне: «О, почему вы просто не вызвали ASUtils.getSnapshot ()»

Ответы [ 2 ]

7 голосов
/ 21 августа 2011

В AS3 нет общего способа вывести состояние ваших переменных, но есть несколько вещей, которые мы можем сделать полезными:

  1. Захватите журнал недавних кликов. Используйте прослушиватель событий сцены, чтобы регистрировать щелчки и отслеживать «путь» объекта по родительской цепочке к сцене. Путь к объекту - это просто все имена объектов DisplayObject, например: screenMain.dialogBuyItem.buttonBuy
  2. Сделайте снимок экрана, уменьшите его до небольшого миниатюра, закодируйте в формате JPEG и загрузите на свой сервер вместе с отзывами. Мы также делаем это, когда есть исключение (см. # 4). as3corelib имеет функции кодирования JPEG в com/adobe/images
  3. Напишите жемчужину командной строки или PHP-скрипт, который вы можете запустить в своем коде AS3, прежде чем опубликовать его, который будет внедрять трассировку вызовов в начале каждого вызова функции. Это позволяет вести историю звонков. Хотя он не так хорош, как полный стек, он даст вам некоторое представление о том, что ваш код делал в последнее время.
  4. Перехватывает утверждения и необработанные исключения и регистрирует их на сервере с помощью активности кликов и трассировки истории вызовов. Слушатели необработанных исключений являются новыми в flash 10.1, но большинство пользователей имеют эту функцию. Вы можете проверить эту поддержку и добавить слушателя следующим образом:

    // Check for the presence of the Flash 10.1 global Error event (exception) handler class.
    // If it exists, we'll listen for it and it will allow us to report errors to our server.
    if ( loaderInfo.hasOwnProperty( 'uncaughtErrorEvents' ) )
        loaderInfo.uncaughtErrorEvents.addEventListener( "uncaughtError", onUncaughtError ); // UncaughtErrorEvent.UNCAUGHT_ERROR
    
  5. Если у вас есть глобальные переменные состояния, которые вы хотите регистрировать с обратной связью, вы можете написать функцию, чтобы вывести их в строку для загрузки с обратной связью с пользователем. Хотя вы можете перечислять свойства класса и объекта, используя for each, это работает только для открытых членов. Используйте Google, и вы найдете некоторые функции, которые люди написали для дампирования объектов и рекурсивного массива данных, используя этот трюк перечисления.

1 голос
/ 22 августа 2011

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

    private function parseObject(o:Object, prefix:String = '>'):String {
        var retStr:String = '';
        for (var s:String in o) {
            retStr += prefix + s + ' = ' + o[s] + '\n';
            if (typeof(o[s]) == 'object') {
                retStr += parseObject(o[s], prefix + '>');
            }
        }
        return retStr; 
    }

надеюсь, это будет полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...