Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Tails

Рейтинг: 3.00. Голосов: 3.

Средство для отладки: trace массивов

Запись от Tails размещена 10.01.2012 в 00:34
Обновил(-а) Tails 16.01.2012 в 12:44

Средство для отладки.
Простенькая функция, для вывода массивов любой размерности в trace. Принимает только 1 аргумент - массив.

Код AS3:
package{
	public function traceArray(array:Array):void{
		var space:String 	= '';
		trace('---------------');
 
		write(array, 0);
 
		function write(_array:Array, _step:int):void{
			space = '';
			for(var i=0; i<_step; i++){space+='	'}
			for(var j=0; j<_array.length; j++){
				if(_array[j] as Array){
 
					trace(space+'['+j+']=Array:');
 
					write(_array[j], _step+=1);
					_step--;
					space = '';
					for(i=0; i<_step; i++){space+='	'}
 
			}else{
				trace(space+'['+j+']='+_array[j]+ ' '+ _array[j].constructor);
			}
			}
		}
		trace('---------------');
	}
}
Вывод алгоритма:
Код:
---------------
[0]=Array:
	[0]=роиашка [class String]
	[1]=простоквашино [class String]
	[2]=селёдка под шубой [class String]
[1]=-5.6 [class Number]
[2]=m1 [class String]
[3]=Array:
	[0]=1 [class Number]
	[1]=2 [class Number]
	[2]=Array:
		[0]=true [class Boolean]
		[1]=false [class Boolean]
		[2]=false [class Boolean]
		[3]=7 [class Number]
		[4]=4 [class Number]
[4]=m3 [class String]
[5]=54 [class Number]
[6]=Array:
	[0]=9 [class Number]
	[1]=6 [class Number]
	[2]=[object Sprite] [class Sprite]
---------------
Такого массива:
Код AS3:
var ab:Array = new Array(new Array('роиашка','простоквашино','селёдка под шубой'),-5.6,'m1',new Array(1,2,new Array(true,false,false,7,4)),'m3',54,new Array(9,6,new Sprite));
traceArray(ab);
*обновлено
Всего комментариев 13

Комментарии

Старый 10.01.2012 09:00 fish_r вне форума
fish_r
 
Аватар для fish_r
На вроде print_r в php? Очень удобно. И почему сам не додумался такую штучку написать? Раздражает куча мала вечно вываливающаяся в трейс...

Спасибо! Утащил к себе (лентяй).


ЗЫ. Можно усложнить добавив объекты и их видимые поля )
Старый 10.01.2012 11:27 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Код AS3:
_array[j] = false;
_array[j] as Boolean
false
Код AS3:
_array[j] = false;
_array[j] is Boolean
true
Старый 10.01.2012 12:01 carrotoff вне форума
carrotoff
 
Аватар для carrotoff
Цитата:
Сообщение от fish_r
ЗЫ. Можно усложнить добавив объекты и их видимые поля )
Трэйсер объектов, по-моему, тигра где то выкладывал
Старый 10.01.2012 13:34 Tails вне форума
Tails
 
Аватар для Tails
wvxvw
Поправил, спс
Старый 10.01.2012 13:37 Rzer вне форума
Rzer
 
Аватар для Rzer
Код AS3:
/**
		 * Текстовое представление объекта
		 * @param	obj Пакет с данными
		 * @return Текстовое представление объекта
		 */
		public static function objectToString(obj:*, showTypes:Boolean = false):String {
 
			var array:Array = [];
 
			if (typeof obj != "object") {
 
				if (showTypes){
					return  "(" + String(typeof obj) + ")" +  String(obj);
				}
 
				return String(obj);
			}
 
			array.push("{");
 
			var count:int = 0;
 
			for (var str:String in obj) {
 
				count++;
 
				if (array.length > 1) {
					array[array.length - 1] +=  ",";
				}
				array.push(str +": " + objectToString(obj[str], showTypes));
			}
 
			if (count == 0 && obj){
				array.push(obj.toString());
			}
 
			array.push("}");
 
			return array.join(" ");
		}
Старый 10.01.2012 15:04 crazyone вне форума
crazyone
 
Аватар для crazyone
Я заморачивался вот такой фигней через describeType. Использовал не для отладки. Для отладки есть отладчики.
Код AS3:
private function makeString(obj:Object,tab:String="\t"):String
		{
			var dXML:XML=describeType(obj);
			var str:String=dXML.@name+":"+obj;
 
			for each(var childXML:XML in dXML.variable){
				str+="\n"+tab+childXML.@name;
				if(String(childXML.@type).indexOf(".")!=-1){
					str+=makeString(obj[childXML.@name],"\t"+tab);
				}else if(childXML.@type=="Array"){
					var arr:Array=obj[childXML.@name] as Array;
					for(var i:* in arr){
						str+="\n"+"\t"+tab+i+":"+makeString(arr[i],"\t"+tab);
					}
				}else{
					str+=":"+obj[childXML.@name]+": "+childXML.@type;
				}
			}
			return str;
		}
Правда геттеры эта ф-я пропускает, проходит только по переменным.
Старый 10.01.2012 23:06 incvizitor вне форума
incvizitor
 
Аватар для incvizitor
Код AS3:
var arr:Array = [];
arr.push(arr);
traceArray(arr);
стэк оверфлоу. И переменные надо типизировать
Старый 10.01.2012 23:25 dimarik вне форума
dimarik
 
Аватар для dimarik
Гляньте ObjectUtils из пакета flex (mx.utils.ObjectUtils#toString())
Старый 13.01.2012 17:03 www.taras вне форума
www.taras

JSON

пользуюсь JSON, очень удобно, единственно в релизе все такие трейсы лучше убрать
Код AS3:
trace(JSON.encode(_object));
Старый 14.01.2012 19:07 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
Спасибо, вдохновил . Только вот не проще было бы:
Код AS3:
trace(space+'['+j+']='+_array[j]+ ' '+(typeof _array[j]));
Вместо:
Код AS3:
if(_array[j] is Boolean){ type 	= ' as Boolean' }
if(_array[j] as int){ type = ' as int' 	}
if(_array[j] as String){ 	type 	= ' as String' 	}
if(_array[j] as Number){ type = ' as Number' }
trace(space+'['+j+']='+_array[j]+type);
Старый 14.01.2012 21:16 fish_r вне форума
fish_r
 
Аватар для fish_r
Цитата:
Для отладки есть отладчики.
В отладчках не всегда удобно смотреть, да и дебаг компилировать надо (медленнее).
Я, например, дебаг-режимом пользуюсь когда, только, что то не срастается и не знаю "куда копать",
да и то не всякий раз...
Старый 14.01.2012 21:20 HardCoder вне форума
HardCoder
 
Аватар для HardCoder
А вот для еще большей информативности:
Код AS3:
trace(space+'['+j+']='+_array[j]+ ' '+ _array[j].constructor);
Старый 14.02.2012 18:40 FlashRus вне форума
FlashRus
 
Аватар для FlashRus
давно хотел себе написать подобное... теперь точно никогда не напишу.) спс.
 

 


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


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