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
A Tracy aktiválása a `Tracy\Debugger::enable()' metódus meghívásával történik a program elején a lehető leghamarabb, mielőtt bármilyen kimenet elküldésre kerülne:
use Tracy\Debugger;
require 'vendor/autoload.php'; // alternatívaként tracy.phar
Debugger::enable();
Az első dolog, amit az oldalon észreveszel, a Tracy Bar a jobb alsó sarokban. Ha nem látja, az azt jelentheti, hogy a Tracy
termelési üzemmódban fut. Ez azért van, mert a Tracy biztonsági okokból csak a localhost-on látható. Ha tesztelni
szeretné, hogy működik-e, a Debugger::enable(Debugger::Development)
paraméter segítségével ideiglenesen
fejlesztési üzemmódba helyezheti.
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/UI/Sign/SignPresenter.php(21): App\Forms\SignFormFactory->create() #3 /sandbox/vendor/nette/component-model/src/ComponentModel/Container.php(181): App\UI\Sign\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.
Megjegyzés: A Tracy aktiválásakor a hibajelentési szint E_ALL-ra változik. Ha ezt meg akarja változtatni, tegye meg a
enable()
meghívása után.
Fejlesztési vs. termelési üzemmód
Mint látható, Tracy elég beszédes, ami a fejlesztői környezetben értékelhető, míg a produktív szerveren katasztrófát okozna. Ott ugyanis nem jelenhet meg hibakeresési információ. A Tracy ezért rendelkezik környezet automatikus felismeréssel, és ha a példát éles szerveren futtatjuk, a hiba megjelenítés helyett naplózásra kerül, és a látogató csak egy felhasználóbarát üzenetet lát:
A termelési mód elnyomja a dump() segítségével küldött összes hibakeresési információ
megjelenítését, és természetesen a PHP által generált összes hibaüzenetet is. Tehát ha elfelejtettél néhány
dump($obj)
címet a kódban, nem kell aggódnod, a termelő szerveren semmi sem fog megjelenni.
Hogyan működik a mód automatikus felismerése? Az üzemmód fejlesztési, ha az alkalmazás localhoston fut (azaz a
127.0.0.1
vagy ::1
IP-címen ) és nincs proxy (azaz a HTTP fejléce). Ellenkező esetben termelési
üzemmódban fut.
Ha más esetekben is engedélyezni szeretné a fejlesztési üzemmódot, például egy adott IP-címről hozzáférő
fejlesztők számára, akkor azt a enable()
módszer paramétereként adhatja meg:
Debugger::enable('23.75.345.200'); // IP-címek tömbjét is megadhatja
Mindenképpen javasoljuk az IP-cím és egy cookie kombinálását. Tároljon egy titkos tokent, pl. secret1234
, a
tracy-debug
cookie-ban, és így csak azon fejlesztők számára aktiválja a fejlesztési módot, akik egy adott
IP-címről lépnek be, és akiknek a cookie-ban szerepel az említett token:
Debugger::enable('secret1234@23.75.345.200');
A fejlesztési/gyártási módot közvetlenül is beállíthatja a Debugger::Development
vagy a
Debugger::Production
konstansok segítségével, a enable()
módszer paramétereként.
Ha a Nette keretrendszert használja, nézze meg, hogyan kell beállítani a módot, és ezután a Tracy esetében is használni fogja.
Hibanaplózás
Termelési üzemmódban a Tracy automatikusan naplózza az összes hibát és kivételt egy szöveges naplóba. Ahhoz, hogy a
naplózás megtörténjen, a naplókönyvtár abszolút elérési útját be kell állítani a $logDirectory
változóba, vagy a enable()
metódus második paramétereként kell átadni:
Debugger::$logDirectory = __DIR__ . '/log';
A hibanaplózás rendkívül hasznos. Képzeld el, hogy az alkalmazásod összes felhasználója valójában bétatesztelő, akik ingyenesen végeznek elsőrangú munkát a hibák felkutatásában, és bolond lennél, ha az értékes jelentéseiket észrevétlenül a kukába dobnád.
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.
}
If you want Tracy to log PHP errors like E_NOTICE
or E_WARNING
with detailed information (HTML
report), set Debugger::$logSeverity
:
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.3 |
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