Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаленная отладка (http://www.flasher.ru/forum/showthread.php?t=210151)

faraday 02.02.2015 03:56

Удаленная отладка
 
Здравствуйте, имеется flash игра, внутри нее стоит слушатель исключений, который сохраняет их на сервер.
Но понять точно что и где глюкануло, по этому логу очень сложно, просто видно наличие ошибок.
Код AS3:

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, function(e:UncaughtErrorEvent) {
e.preventDefault();
saveStat('clientError', e.error.code+e.error.message); });

получить Стек вызовов в release версии не удается, воспроизвести их самому в debug версии - тоже.
Как можно извлечь максимум информации ,о том где сидят баги?

in4core 02.02.2015 15:23

Писать более красивый и понятный код. На самом деле понять легко, в исключении пишется название метода, ага - уже неплохо. Далее если метод не на 1000 строк ( а это заведомо плохой код ) - то по логике можно понять где возможность падения на null pointer или типа того.
Я уже давно использую данный способ для отладки, и в 90% случаях сразу понятно что и где падает, в редких 10% приходится более деатальный анализ проводить, форсировать отправку данных и т.п.

faraday 02.02.2015 17:26

В том то и дело, что выводит только код ошибки и ее название, место где она произошла - нету. в документации написано что getStackTrace работает только в debug версии и AIR

PainKiller 03.02.2015 13:47

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

in4core 03.02.2015 16:18

Не придумывайте ! Все в релизной пишется! Не пишется ТОЛЬКО конкретная строчка кода, а метод и класс в котором упало пишется! Вечером скину рабочий код

Добавлено через 3 часа 3 минуты
Код AS3:

private static function uncaughtErrorHandler(e:UncaughtErrorEvent):void
        {
                        e.preventDefault();
 
                        errorString += e.error.getStackTrace() + "\n\n";
                        field.htmlText = errorString;
 
 
 
 
            if (e.error is Error)
            {
                var error:Error = e.error as Error;
                                errorString += error.message + "\n";
            }
            else if (e.error is ErrorEvent)
            {
                var errorEvent:ErrorEvent = e.error as ErrorEvent;
                                errorString += errorEvent.text + "\n";
            }
            else
            {
                                errorString += e.error.toString() + "\n";
            }
 
                        field.htmlText = errorString;
        }

Что то типа того, в релизе будет показывать имя метода и класс

Добавлено через 3 часа 5 минут
Да и кстати, это неоптимизированная часть, вы можете просто отработать getStackTrace() и все. В релизе будет ОК!

faraday 03.02.2015 22:11

Спасибо, скопмелировал код под 11.5 версию плеера. Но влог по прежнему идет null. У игроков как я понимаю тоже должна стоять версия 11.5+ , у тех кого младше - просто не работает?

in4core 04.02.2015 03:50

Покажи, что идет в ЛОГ. В логе должно быть что то типа : лалала 1090 error, on Main.init() алалала если в мейне падало. То есть указание на конкретный метод должно быть

Tails 04.02.2015 09:08

До определённой версий релизного плеера, (Не помню точно какой) getStack не возвращал стек вызова.

PainKiller 04.02.2015 10:21

Да точно, погуглил, http://stackoverflow.com/questions/1...e-flash-player я тогда работал с более младшей версией плеера. 11.5+ возвращает stacktrace. И swf-version должна быть не ниже 18.

faraday 04.02.2015 13:17

Спасибо, теперь работает)


Часовой пояс GMT +4, время: 01:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.