Debugger::Dump – pár drobných návrhů na vylepšení

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
LeonardoCA
Člen | 296
+
0
-

1. Nastavitelné maxDepth, maxLenght pro jednotlivý dump – často jsem se setkal s tím, že jsem potřeboval zvýšit maxDepth třeba na 5 nebo 7 a pak jsem se divil, že se doba zobrazení stránky během ladění najednou zvýšila z milisekund na sekundy /v případě chyby, překlepu/

Samozřejmě, logicky to bylo proto, že nastavené Depth se apikovalo i pro celý Bluescreen.

Prostě aby místo

Debugger::$maxDepth = 7;
Debugger::dump($something);
Debugger::$maxDepth = 3;

stačilo třeba

Debugger::dump($something, 7);

to samé pro dump.

Problém je že to není moc dobře zakomponovatelné do současného API, protože obě formy zápisu již využívají více parametrů a každý jiné. Takže nejjednodušší by to asi bylo přes jinou zkratku. tak to už používám, ale bylo by fajn kdyby to nette podporovalo nativně

2. V případě zobrazení Bluescreen při ajaxovém požadavku by se hodilo vyrenderovat dumpy do samostatného panelu Bluescreen, protože metody jak si zobrazit Bluescreen ze souboru máme, ale k dumpům v čitelné podobě se v případě chyby špatně dostává. (Zkoušel jsem to udělat rozšířením, ale bez přímého zásahu do kodu třídy Debugger jsem nepřišel na žádné rozumné řešení)

jansfabik
Člen | 193
+
0
-

1. Napiš si radši vlastní funkci.

function d($val, $maxDepth = 5)
{
	$old = Debugger::$maxDepth;
	Debugger::$maxDepth = $maxDepth;
	Debugger::dump($val);
	Debugger::$maxDepth = $old;
	return $val;
}

d() se píše mnohem líp než use Nette\Diagnostics\Debugger; + Debugger::dump().

2. Nestačí Debugger::fireLog. Můžeš odchytávat při ajaxu výjimky na úrovni celé aplikace a dumpovat si je.

Editoval jansfabik (4. 10. 2012 22:40)

Majkl578
Moderator | 1364
+
0
-

Ad 1.: Brání ti něco napsat si vlastní funkci, která bude na pár řádků?

function dumpEx($var, $depth = 3, $length = 2000)
{
	$oldDepth = Debugger::$maxDepth;
	$oldLength = Debugger::$maxLength;
	Debugger::$maxDepth = $depth;
	Debugger::$maxLength = $length;
	dump($var);
	Debugger::$maxDepth = $oldDepth;
	Debugger::$maxLength = $oldLength;
}
LeonardoCA
Člen | 296
+
0
-
  1. To není návrh pro mně, já už to mám vyřešeno, ale nepomohlo by to novým? Nebo je nějaký důvod proč to nemůže být přímo v distribuci a musí sí každý to samé napsat po svém?
  2. Nemám rád firelog je nepřehledný. Raději mám klikatelný dump.
jansfabik
Člen | 193
+
0
-
  1. Debugger::dump už ten druhý parametr používá k jinému účelu.
  2. Můžeš si ty BlueScreen logovat do adresáře log. Nebo zkus udělat pull request toho svého rozšíření do Nette.
LeonardoCA
Člen | 296
+
0
-

2. Mám něco splácané narychlo, na pull request bych to musel přepracovat, pokud by to bylo shledáno jako užitečné více lidmi a pokud by se schválila integrace přímo do nette, tak by se to řešilo úplně jinak.

Filip Procházka
Moderator | 4668
+
0
-

Imho tyhle helper funkce by mohly být v sandboxu.