Debugger::Dump – pár drobných návrhů na vylepšení
- LeonardoCA
- Člen | 296
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
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
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
- 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?
- Nemám rád firelog je nepřehledný. Raději mám klikatelný dump.
- jansfabik
- Člen | 193
- Debugger::dump už ten druhý parametr používá k jinému účelu.
- 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
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.