EN | CS | Přihlásit | Registrovat

Nette\Debug

Knihovna Nette\Debug, která zdomácněla pod jménem Laděnka, je užitečnou každodenní pomocnicí PHP programátora.

Zachytávání chyb a výjimek

Zachytáváni chyb je nejlepší zapnout na samém začátku, hned po načítání Nette.

require LIBS_DIR .'/Nette/loader.php';
Debug::enable();

Volání Debug::enable() aktivuje laděnku, která sama detekuje, zda běží na vývojovém nebo produkčním servru. Na vývojovém zobrazuje výjimky uživateli-vývojáři, na produkčním chyby loguje, případně posílá informaci na e-mail. Na zjištění, jestli beží Nette na produkčním servru použijte metodu Environment::isProduction(). Další informace najdete v API třídy Debug.

Zpráva o nezachycené výjimce nebo chybě poskytuje vývojáři důležitou informaci o tom, kde a proč k ní došlo. Standardní výstup v PHP vypadá asi takto:

Standardní podoba nezachycené výjimky

Pusťme však ke slovu Laděnku. Po aktivaci příkazem Debug::enable() nám předvede svou nejvíce sexy podobu:

Nezachycená výjimka v provedení Nette\Debug

Takto vypadá výjimka, takto vypadá vygenerovaná chyba. To je pak jiné ladění, co? Takto zobrazeny jsou automaticky všechny fatální chyby. Pro ještě hlubší odvšivování lze zapnout striktnější mód. Pak budou stejným způsobem zobrazeny i chyby nižších úrovní jako E_NOTICE a E_WARNING.

Debug::$strictMode = TRUE;

Jednotlivé části obrazovky lze navíc pohodlně myší rozklikávat:

Jsou ale situace, kdy si určité části kódu chceme ošetřit přes try/catch a ne každé vyhození vyjímky musí následovat ukončením skriptu. Metoda processExcepti­on() má za úkol zobrazit/zalogovat výjimku a předat řízení zpět aplikaci, narozdíl od exceptionHandler(), který po zpracování vyjímky činnost aplikace ukončí.

Variable dump

Každý ladič je dobrým kamarádem s funkcí var_dump, která podrobně vypíše obsah proměnné. Bohužel v prostředí HTML výpis pozbude formátování a slije se do jednoho řádku, o sanitizaci HTML kódu ani nemluvě. V praxi je nezbytné var_dump nahradit šikovnější funkcí. Tou je právě Debug::dump()

$arr = array(10, 20.2, TRUE, NULL, 'hello');

Debug::dump($arr);
// včetně jmenného prostoru Nette\Debug::dump($arr);

vygeneruje výstup:

<pre><span style="color:gray">array</span>(5) {
[0] => <span style="color:gray">int</span>(10)
[1] => <span style="color:gray">float</span>(20.2)
[2] => <span style="color:gray">bool</span>(true)
[3] => <span style="color:gray">NULL</span>
[4] => <span style="color:gray">string</span>(5) "hello"
}
</pre>

Měření času

Dalším užitečným nástrojem ladiče jsou stopky s přesností na mikrosekundy:

Debug::timer();

// princi můj malinký spi, ptáčkové sladce již sní...
sleep(2);

$elapsed = Debug::timer();
// $elapsed ≈ 2

Volitelným parametrem je možno dosáhnout vícenásobných měření.

Debug::timer('page-generating');
// nějaký kód
Debug::timer('rss-generating');

// nějaký kód
$rssElapsed = Debug::timer('rss-generating');
$pageElapsed = Debug::timer('page-generating');

Profiler

Profiler se zapíná pomocí příkazu Debug::enableProfiler();

Má své API a podporuje přetahování myší. Přidat do něj další informace se dá velmi snadno:

Debug::$counters['Last SQL query'] = & dibi::$sql;
Debug::$counters['Nette version'] = Framework::VERSION . ' ' . Framework::REVISION;

Debug::addColophon(array('dibi', 'getColophon'));

Veškerý výstup profileru lze vypnout voláním

Debug::disableProfiler();

Viz také:


Login to submit a comment