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: