Kezdő lépések Tracyvel
A Tracy könyvtár egy hasznos segédprogram a mindennapi PHP programozók számára. Segít a következőkben:
- a hibák gyors felismerésében és kijavításában
- a hibák naplózása
- változók dumpolása
- a szkriptek/lekérdezések végrehajtási idejének mérése
- a memóriafogyasztás megtekintése
A PHP tökéletes nyelv a nehezen észrevehető hibák készítésére, mert nagy rugalmasságot biztosít a programozóknak. A Tracy\Debugger emiatt még értékesebb. Ez egy végső eszköz a diagnosztikai eszközök között. Ha először találkozol Tracyvel, hidd el, az életed kezd kettéválni egy Tracy előtti és egy vele való életre. Üdvözöljük a jó résznél!
Telepítés és követelmények
A Tracy telepítésének legjobb módja a legújabb csomag letöltés vagy a Composer használata:
composer require tracy/tracy
Alternatívaként letöltheti a teljes csomagot vagy a tracy.phar fájlt.
Használat
Tracy aktiválása egyszerű. Egyszerűen add hozzá ezt a két kódsort, lehetőleg közvetlenül a könyvtár betöltése
után (mint a require 'vendor/autoload.php'
), és mielőtt bármilyen kimenetet elküldenél a böngészőnek:
use Tracy\Debugger;
Debugger::enable();
Az első dolog, amit a weboldalon észre fog venni, egy Tracy sáv.
(Ha nem lát semmit, az azt jelenti, hogy a Tracy termelési üzemmódban fut. Biztonsági okokból a Tracy csak a localhoston
látható. A enable()
metódus első paramétereként a Debugger::Development
átadásával
kényszerítheti a Tracy-t fejlesztési módban való futtatásra).
A enable()
a hibajelentési szint E_ALL-ra történő módosítását foglalja magában.
Tracy Bar
A Tracy Bar egy lebegő panel. Az oldal jobb alsó sarkában jelenik meg. Az egérrel mozgatható. Az oldal újratöltése után megjegyzi a pozícióját.
Más hasznos paneleket is hozzáadhat a Tracy Barhoz. Érdekeseket találhatsz az addonokban, vagy létrehozhatod a sajátodat.
Ha nem szeretné megjeleníteni a Tracy Bar-t, állítsa be:
Debugger::$showBar = false;
Hibák és kivételek megjelenítése
Bizonyára tudod, hogyan jelzi a PHP a hibákat: az oldal forráskódjában van valami ilyesmi:
Parse error: syntax error, unexpected '}' in HomePresenter.php on line 15
vagy el nem fogott kivétel:
Fatal error: Uncaught Nette\MemberAccessException: Call to undefined method Nette\Application\UI\Form::addTest()? in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php:100 Stack trace: #0 /sandbox/vendor/nette/utils/src/Utils/Object.php(75): Nette\Utils\ObjectMixin::call(Object(Nette\Application\UI\Form), 'addTest', Array) #1 /sandbox/app/forms/SignFormFactory.php(32): Nette\Object->__call('addTest', Array) #2 /sandbox/app/presenters/SignPresenter.php(21): App\Forms\SignFormFactory->create() #3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\Presenters\SignPresenter->createComponentSignInForm('signInForm') #4 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(139): Nette\ComponentModel\Container->createComponent('signInForm') #5 /sandbox/temp/cache/latte/15206b353f351f6bfca2c36cc.php(17): Nette\ComponentModel\Co in /sandbox/vendor/nette/utils/src/Utils/ObjectMixin.php on line 100
Nem olyan könnyű eligazodni ebben a kimenetben. Ha engedélyezi a Tracy funkciót, mind a hibák, mind a kivételek teljesen más formában jelennek meg:

A hibaüzenet szó szerint ordít. Látható a forráskód egy része a kiemelt sorral, ahol a hiba előfordult. Az üzenet világosan megmagyarázza a hibát. Az egész oldal interaktív, próbálja ki.
És tudod mit? A végzetes hibákat ugyanígy rögzíti és megjeleníti. Nem kell semmilyen bővítményt telepíteni (kattintson az élő példa megtekintéséhez):

Az olyan hibák, mint például egy változó nevének elírása vagy egy nem létező fájl megnyitásának kísérlete E_NOTICE vagy E_WARNING szintű jelentéseket generál. Ezek könnyen figyelmen kívül hagyhatók és/vagy teljesen elrejthetők egy weboldal grafikai elrendezésében. Hagyja, hogy a Tracy kezelje ezeket:
Vagy hibaként jelenhetnek meg:
Debugger::$strictMode = true; // minden hiba megjelenítése
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // minden hiba, kivéve az elévült hibaüzeneteket.

Az objektumhoz rendeléskor a helyesírási hibák felismerésére a Nette\SmartObject tulajdonságot használjuk.
Gyártási mód és hibanaplózás
Amint láthatod, Tracy elég ékesszóló. Fejlesztői környezetben értékelhető, de egy termelő szerveren katasztrófát okozna. Ott semmilyen hibakeresési információ nem szerepelhet. Ezért a Tracy rendelkezik egy környezet automatikus felismerő és naplózó funkcióval. Ahelyett, hogy megmutatná magát, Tracy egy naplófájlba tárolja az információkat, és egy felhasználó számára érthető szerverhibaüzenetet mutat a látogatónak:

A termelési kimeneti mód elnyom minden hibakeresési információt, amelyet a dump() segítségével küld ki, és természetesen a PHP által generált összes
hibaüzenetet. Tehát, még ha el is felejted a dump($obj)
címet a forráskódban, a termelő szerveren nem kell
aggódnod emiatt. Semmi sem lesz látható.
A kimeneti módot a Debugger::enable()
első paramétere határozza meg. A Debugger::Production
vagy
a Debugger::Development
konstans megadható. Másik lehetőség, hogy úgy állítsuk be, hogy a fejlesztési mód
akkor legyen bekapcsolva, ha az alkalmazást egy meghatározott IP-címről érik el a tracy-debug
cookie
meghatározott értékével. Az ehhez használt szintaxis a cookie-value@ip-address
.
Ha nincs megadva, akkor az alapértelmezett Debugger::Detect
értéket használjuk. Ebben az esetben a rendszer az
IP-cím alapján érzékeli a kiszolgálót. A termelési módot választja, ha egy alkalmazás nyilvános IP-címen keresztül
érhető el. A helyi IP-cím a fejlesztési módhoz vezet. A legtöbb esetben nincs szükség a mód beállítására. Az
üzemmód helyesen kerül felismerésre, ha az alkalmazást a helyi kiszolgálón vagy a termelésben indítja el.
Termelési üzemmódban a Tracy automatikusan rögzíti az összes hibát és kivételt egy szöveges naplóba. Hacsak nem ad meg mást, a log/error.log fájlban tárolja. Ez a hibanaplózás rendkívül hasznos. Képzelje el, hogy az alkalmazás minden felhasználója valójában bétatesztelő. Ők ingyen végeznek élvonalbeli munkát a hibák vadászata során, és butaság lenne, ha értékes jelentéseiket észrevétlenül kidobnád a kukába.
Ha saját üzeneteket vagy elkapott kivételeket kell naplóznod, használd a log()
módszert:
Debugger::log('Váratlan hiba'); // szöveges üzenet
try {
criticalOperation();
} catch (Exception $e) {
Debugger::log($e); // log kivétel
// vagy
Debugger::log($e, Debugger::ERROR); // e-mail értesítést is küld.
}
Az enable() metódus második paraméterével beállítható a hibák naplózására szolgáló könyvtár:
Debugger::enable(Debugger::Detect, __DIR__ . '/mylog');
Ha azt szeretné, hogy a Tracy naplózza a PHP hibákat, mint például a E_NOTICE
vagy a E_WARNING
részletes információkkal (HTML jelentés), akkor állítsa be a Debugger::$logSeverity
értéket:
Debugger::$logSeverity = E_NOTICE | E_WARNING;
Egy igazi szakember számára a hibanapló fontos információforrás, és minden új hibáról azonnal értesülni akar. A Tracy segít neki ebben. Képes arra, hogy minden új hibajegyzékről e-mailt küldjön. A $email változó azonosítja, hogy hova küldje ezeket az e-maileket:
Debugger::$email = 'admin@example.com';
Ha a teljes Nette keretrendszert használja, akkor ezt és másokat is beállíthat a konfigurációs fájlban.
Hogy megvédje az e-mail postafiókját az elárasztástól, a Tracy csak egy üzenetet küld, és létrehoz egy fájlt:
email-sent
. Amikor egy fejlesztő megkapja az e-mail értesítést, ellenőrzi a naplót, kijavítja az
alkalmazását, és törli a email-sent
felügyeleti fájlt. Ez újra aktiválja az e-mail küldést.
Fájlok megnyitása a szerkesztőben
Amikor a hibaoldal megjelenik, a fájlnevekre kattintva megnyílnak a szerkesztőprogramban, a kurzor a megfelelő soron lesz.
A fájlokat létre is lehet hozni (művelet create file
) vagy hibát javítani bennük (művelet
fix it
). Ehhez a böngészőt és a rendszert kell
beállítani.
Támogatott PHP-verziók
Tracy | kompatibilis a PHP-vel |
---|---|
Tracy 2.10 – 3.0 | PHP 8.0 – 8.2 |
Tracy 2.9 | PHP 7.2 – 8.2 |
Tracy 2.8 | PHP 7.2 – 8.1 |
Tracy 2.6 – 2.7 | PHP 7.1 – 8.0 |
Tracy 2.5 | PHP 5.4 – 7.4 |
Tracy 2.4 | PHP 5.4 – 7.2 |
A legújabb javítási verziókra vonatkozik.
Portok
Ez egy lista a más keretrendszerek és CMS-ek nem hivatalos portjairól:
- Drupal 7
- Laravel framework: recca0120/laravel-tracy, whipsterCZ/laravel-tracy
- OpenCart
- ProcessWire CMS/CMF
- Slim Framework
- Symfony framework: kutny/tracy-bundle, VasekPurchart/Tracy-Blue-Screen-Bundle
- Wordpress