Отображение трассировки для неотладочного приложения AS3 - PullRequest
0 голосов
/ 04 июля 2011

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

Кто-нибудь знает способ отображения сообщений трассировки системы, например, в текстовом поле на сцене?Таким образом, я мог бы найти ошибку, проследив ее до их экрана.

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 июля 2011

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

Вы также можете использовать UncaughtErrorEvents: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/UncaughtErrorEvents.html?filter_flash=cs5&filter_flashplayer=10.1&filter_air=2

Ниже приведен простой код, который я использую для блокировки вывода отладки.

protected const inputHistory : Array = [];
private var lockPhrase : String;
private var isUnlocked : Boolean;

private function onKeyUp(event : KeyboardEvent) : void
{
    isUnlocked = checkLock();
    if (event.keyCode == Keyboard.SPACE) {
        if (event.shiftKey) {
            if (isUnlocked) {
                // log panel opens by Shift + Space shortcut
                // only if it was previously unlocked
                toggle(true);
            }
        }
    }
    if (lockPhrase && lockPhrase.length) {
        inputHistory.push(event.charCode);
        while (inputHistory.length > lockPhrase.length) {
            inputHistory.shift();
        }
    }
}

private function checkLock() : Boolean
{
    if (isUnlocked || lockPhrase == null || lockPhrase.length == 0) {
        return true;
    }
    if (inputHistory.length != lockPhrase.length) {
        return false;
    }
    var match:uint = 0;
    for (var i : uint = 0; i < lockPhrase.length; i+=1) {
        if (lockPhrase.charCodeAt(i) == inputHistory[i]) {
            match += 1;
        }
    }
    return (match == lockPhrase.length);
}
0 голосов
/ 04 июля 2011

Недавно я начал использовать вызов ExternalInterface для отладки Flash, с помощью консоли Firebug или любой другой консоли, поддерживаемой вашим браузером.

Мы используем этот фрагмент Javascript из Html5Boilerplate:

window.log = function(){
  log.history = log.history || [];
  log.history.push(arguments);
  arguments.callee = arguments.callee.caller;  
  if(this.console) console.log( Array.prototype.slice.call(arguments) );
};
(function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();)b[a]=b[a]||c})(window.console=window.console||{});

А затем используйте

ExternalInterface.call('window.log','Debug text goes here');
...