Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Debug as3 static var (http://www.flasher.ru/forum/showthread.php?t=161296)

wir_wolf 22.07.2011 17:47

Debug as3 static var
 
Всем здравствуйте.
Столкнулся с проблемой что Отладчик Флеш не показывает переменные static

к примеру есть глобальный класс

Код AS3:

public final class Global
 {
  public static var FILE_FILTER:Array = ["Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.JPG;*.jpeg;*.JPEG;*.gif;*.GIF*.png;*.PNG"];
  private static var  fileRef:FileReferenceList = new FileReferenceList();
  private static var arr_original_img:Array;

и вот, когда я отлаживаю флешку через Flex то я не вижу этих переменных.

Возможно это из-за того что я не создаю объект, типа
Код AS3:

var Global:Global = new Global;

Как выйти из этой ситуации? Что посоветуете

Dweem 22.07.2011 18:04

может быть потому, что они у вас private?

wir_wolf 22.07.2011 18:27

Ладно, не спорю, пример не удачный, так как писал не дома.
А вот так?
Код AS3:

package 
{
        import flash.display.*;
        import flash.net.*;
 
        import mx.collections.ArrayCollection;
        import flash.external.ExternalInterface;
 
    public class Global
    {
                public static var original_img:Array;       
                public static var thumbImg_Arr:ArrayCollection = new ArrayCollection;
        public static var switcherThumbsLabel:String = "thumbnails";
        public static var time_start:*;
 
        public function Global():void
        {
 
        }// end function
                public static function Log(text_log:*):void {
                        ExternalInterface.call("debugLog", "[" + time_start +"]" + text_log);
                        //trace("["+ time_start +"]" + text_log);
                }
    }
}


toFL 22.07.2011 18:33

И в чем проблема? Вставил ваш пример во FlashIDE и все у меня показало. Возможно вас пугает:
Код AS3:

//trace [undefined]text_log

Так это просто переменная time_start не определена

wir_wolf 22.07.2011 18:37

Праблы в том что FLEX этого не показывает.А по поводу функции, то там все ок, там так нужно чтоб оно было без типа.
Не знаете а во Flex есть настройка чтобы были видны статики...?

toFL 22.07.2011 18:48

Цитата:

Сообщение от wir_wolf (Сообщение 1013744)
Праблы в том что FLEX этого не показывает.А по поводу функции, то там все ок, там так нужно чтоб оно было без типа.
Не знаете а во Flex есть настройка чтобы были видны статики...?

Причем тут Flex? Все равно обрабатывает все Flash Player. А видимость переменных (статических и любых других) указывается при помощи: public, private, protected... Ну или просвети, если я ошибаюсь.

wir_wolf 22.07.2011 18:55

Вечером буду дома все выложу с картинками.

-De- 22.07.2011 19:00

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

dimarik 22.07.2011 21:10

Включите во Flash/Flex Builder отображение статических полей.

wir_wolf 23.07.2011 15:31

Где это сделать?. И если можна во FlashDevelop е тоже.

Добавлено через 2 часа 12 минут
dimarik, у меня просто такая архитектура приложения, что есть класс public class Global в котором хранятся глобальные перемены которые нужны для выполнения всего приложения. Но в ходе работы, я не могу просматривать что туда добавляется, и что там уже есть.
Как мне быть в этой ситуации?

tofflife 26.09.2011 15:35

Возвращаясь к теме вопроса.
static-переменные в отладчике Flash видны только из статических методов, поскольку отладчик флеш отображает переменные только для текущего прототипа объекта, а на статические составляющие создается отдельный прототип класса. Для просмотра статических переменных, создайте статический метод и вызываейте его вот так:

Код AS3:

public class SomeClass{
 
  private var m_objectVar:Object = new Object();
 
  private static var ms_classVar:Object = new Object();
 
  private function doSomething():void{
    trace("dynamic debug now...");//Видна m_objectVar
    SomeClass.testVars();
  }
 
  private static function testVars():void{
    trace("static debug now....");//Сюда ставим бреак поинт. Видим, что видна ms_ClassVar.
  }
}


И ещё. Хранить статические переменные и классы для глобальных вещей - не айс. Если архитектура будет расширяться, то их, возможно, придетсья свитчить на другие типы. Лучше делать это через синглтоны.

Вот так, было:

Код AS3:

public class GlobalVars{
  private static var ms_variable:Number;
  private static var ms_variable2:String;
  public static function getVariable():Number{
    return ms_variable;
  }
  public static function getVariable2():String{
    return ms_variable2;
  }
}
 
//....
 
var value:Number = GlobalVars.getVariable();//Жесткая перивязка к классу

А стало:

Код AS3:

public class GlobalVarsController implements IGlobalVarsController{
  private static var ms_instance;
  private static var ms_variable:Number;
  private static var ms_variable2:String;
  public function getVariable():Number{
    return m_variable;
  }
  public function getVariable2():String{
    return m_variable2;
  }
  public static function getInstance():IGlobalVarsController{
    if (ms_instance == null){
      ms_instance = new GlobalVarsController();
    }
    return ms_instance;
  }
}
 
///....
 
var globalController:IGlobalVarsController = GlobalVarsController.getInstance();
//Либо так: var globalController:IGlobalVarsController = Factory.GetController("GlobalVars");
//Как видно, здесь мы можем оперировать одним интерфейсом, что вводит гибкость в архитектуру.
 
var value:Number = globalController.getVariable();//Нежесткая привязка, мы работаем с интерфейсом, а не с классом

Надеюсь, я помог.

alatar 26.09.2011 15:55

Цитата:

Сообщение от wir_wolf (Сообщение 1013938)
Где это сделать?.

В Flash Debug perspective в окне Variables нажать на кнопку с иконкой в виде стрелки вниз. Выбрать Flex -> Show Static Variables и Show Constants (если нужны и константы)


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

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