flash.trace.Trace

Да, есть такой класс, очень не приметный, но может быть очень полезным :)

Он делает отличную штуку :). После “запуска” выдаёт в output имена ВСЕХ! методов, которые запускаются с именами классов к которым они принадлежат. Класс не документирован, т.е. как с ним работать я не знаю (google тоже ничего не говорит), но методов проб и ошибок что-то удалось выяснить.

Вот все его методы (класс статический, т.е. все методы - статические):

  • Trace.setLevel(l:int, target:int=2):Object
  • Trace.getLevel(target:int=2):int
  • Trace.setListener(f:Function):Object
  • Trace.getListener():Function;

Trace.setLevel(l:int, target:int=2):Object

Устанавливает уровень вещания и цель вещания.

Первым параметром может быть одна из констант:

  • Trace.METHODS_AND_LINES_WITH_ARGS = 4
    • Название метода с входными параметрами и номер строки в коде с путём к класс, в котором был запущен метод
  • Trace.METHODS_AND_LINES = 3
    • Название метода и номер строки
  • Trace.METHODS_WITH_ARGS = 2
    • Название метода с входными параметрами
  • Trace.METHODS = 1
    • Только название метода
  • Trace.OFF = 0
    • Выключено

Вторым параметром может быть:

  • Trace.LISTENER = 2
    • Вещать в функцию, заданную с помощью setListener().
  • Trace.FILE = 1
    • Вещать в output.

Trace.getLevel(target:int=2):int

Возвращает уровень вещания для цели.

Trace.setListener(f:Function):Object

Устанавливает функцию-листенер при цели вещания = Trace.LISTENER.

Функция должна принимать 4 параметра:

  1. private function traceListener(
    1. fileInfo:String,
    2. lineNumber:String,
    3. classAndMethod:String,
    4. methodArguments:String
  2. ):void

fileInfo - папка, где находится файл + “;” + что-то ещё (у меня была пустая строка) :) + “;” + имя файла.

Пример: “D:\Projects\ForTestsF3\src;;ForTestsF3.mxml”

lineNumber - номер строчки

classAndMethod - полное имя класса + (”/” || “$/” ) + имя метода.

Примеры: “flash.display::DisplayObjectContainer/addChild”

“flash.trace::Trace$/setListener” - “$/” используется, если метод статичный

methodArguments -входные параметры метода, разделённые запятой (,). Но если параметры заданы с помощью rest оператора (…), то они показаны не будут.

Trace.getListener():Function

Возвращает, заданную раньше, функцию-листенер.

Вот пример:

  1. import flash.trace.Trace;
  2. function test(t:String):String
  3. {
    1. return t;
  4. }
  5. Trace.setLevel(Trace.METHODS_WITH_ARGS, Trace.FILE);
  6. var st:String = “hello!”;
  7. test(st);
  8. stop();

В output увидите:

  1. 14554003 AVMINF: MTHD Untitled_fla::MainTimeline/test (”hello!”) @ 0×042F0300
  2. 4554004 AVMINF: MTHD flash.display::MovieClip/stop () @ 0×0EF004D0

Огромное спасибо 7thsky за помощь!

Таґи:

Коментарів: 28 to “flash.trace.Trace”

  1. 7thsky:

    у Trace.setLevel - есть второй параметр. Trace.FILE, Trace.LISTENER - это я понял для этого.

    [code]
    package {

    import flash.display.Sprite;
    import flash.events.Event;
    import flash.trace.*;
    import flash.utils.describeType;

    public class testAS3
    extends Sprite {

    public function testAS3 () {
    addEventListener(Event.ADDED_TO_STAGE, processInitialization);
    }

    private function processInitialization (… params):void {
    Trace.setLevel (Trace.METHODS_AND_LINES_WITH_ARGS, Trace.FILE);
    Trace.setListener (traceHandler);
    trace (describeType (Trace));
    }

    private function traceHandler (… params):void {
    var a:int = 5;

    a++;
    }

    }
    }
    [/code]

    В таком варианте не запускается листинер. если поставить Trace.LISTENER - то на каждый вызов запускается traceHandler, который получает 4 параметра
    1 - строка с параметрами (разделенные “;”) там директория, еще чего то, название файла
    2 - номер стоки
    3 - класс + имя метода
    4 - хрен его знает чего - может наймспайс…

  2. __i:

    спарведливо для сдк 3.0.0, я думаю что это появилось в какой то из версий плеера например 9.0.115 +

  3. yoyo:

    Это для flex-профайлера сделано было, если найду ссылку отпишу.

  4. pirrest:

    до 7thsky:
    Дякую! А я як тільки не пробував, не виходило “завести” лістенер :)

    до yoyo:
    Чекаю на посилання! :)

  5. CreepingDeath:

    А где этот класс можно найти не подскажете?

  6. pirrest:

    Этот класс “встроен” в последине апдейты флэш плеера.
    У меня работает в 9.0.115.

  7. CreepingDeath:

    а как мне из своего flex приложения получить доступ к его методам?

  8. pirrest:

    Попробуйте так:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
    <![CDATA[
    import flash.trace.Trace;
    ]]>
    </mx:Script>
    <mx:creationComplete>
    <![CDATA[
    Trace.setLevel(Trace.METHODS_AND_LINES_WITH_ARGS, Trace.FILE);
    ]]>
    </mx:creationComplete>
    </mx:Application>

    Но если Вы используете Flex Builder ниже 3-й версии, то это у Вас не получиться, т.к. его там просто нет :)

  9. CreepingDeath:

    нет)) ну про импорты я конечно знаю. Дело в том что у меня почемуто билдер не видит данного класса. Просто напросто нету его. Хотя стоит flash player 9.0.115

  10. CreepingDeath:

    мне бы просто .as файлик этот раздобыть. Просто нужно в очень сжатые сроки логгер написать)

  11. pirrest:

    там нету аs файла
    этот класс находится в playerglobal.swc
    а его описание в Global.as который находиться здесь:
    {путь_к_workspace_Flex_Builder_3}\.metadata\.plugins\com.adobe.flexbuilder.codemodel\extraClassPath\Global.as

    Можно войти в Global.as если клацнуть F3 на Number, например.

    думаю Вам можно попробовать скачать последнюю версию Flex SDK и обновить Вашу.

    http://www.adobe.com/ru/cfusion/entitlement/index.cfm?e=flex3email

  12. CreepingDeath:

    спасибо большое)

  13. CreepingDeath:

    ещё одна проблемка.
    При выводе лога в файл, а именно при установке парметра Trace.LISTENER и при использовании обработчика принимающего 4 параметра сыпятся эксепшены причём в классах самого Flex SDK. Я уверен что проблема именно в функции обработчике. Можно ли это как нибудь побороть?

  14. pirrest:

    Я Вам ответил на почту (creeping.by(собачка)gmail(точка)com).
    Если Вы не получали письма, напишите пожалуйста :)

  15. php freelancer:

    http://hg.mozilla.org/ru/tamarin-central/index.cgi/file/e774dfe22b39/extensions/Trace.as

  16. мотоцикл Yamaha спорт байк YZF-R46:

    Сорри за оффтоп, кто-нить смотрел ролики на ютьюбе про конец света? Ну, про андронный колайдер :) Ваще страшно!

  17. шифровальщик v1.0:

    Ну, вот… так всегда: сначала все путем, а потом пошло-поехало…

  18. сумки аксессуары Казань магазины обуви и одежды:

    Ну, вы тут развернули полемику! Надо же по сути писать, а не распаляться по мелочам.

  19. Лилия Казань:

    Что ж… время и жизнь покажут, как все будет :)

  20. дикторы база:

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

  21. Ptinec:

    Хм… не многие позволяют себе так откровенно говорить об этом. Молодцом! :)

  22. Лиля:

    Что ж… и такое мнение допустимо. Хотя, думаю, возможны и другие варианты, так что не огорчайтесь.

  23. Римма:

    Вот есть дни медработника, шахтера, учителя, а день блоггера када? Кто-нить в курсе?

  24. Алеся:

    Прикольный пост, понравилось. Мне нравится, что об этом хоть кто-то говорит без смущений.

  25. Za84ORB:

    Уважаю всех, кто не боится так сказать, и вас в том числе.

  26. T34:

    Спасибо за такой пост, всё подробно расписано и что самое гланое доступно для читателя. Узнал много новых вещей, но большинство что Вы рассказали не встречал в жизни.

  27. vadzik:

    Аааа! В рот мне ноги!

  28. ForTune:

    у каждого своя жизнь

Залиште свій коментар