Začetek dela s Tracyjem
Knjižnica Tracy je uporaben pomočnik za vsakdanje programerje PHP. Pomaga vam pri:
- hitro odkrijete in popravite napake
- beleženje napak
- izpisati spremenljivke
- merjenje časa izvajanja skript/zahtev
- pregledati porabo pomnilnika
PHP je odličen jezik za izdelavo težko zaznavnih napak, saj programerjem omogoča veliko prilagodljivost. Tracy\Debugger je zaradi tega še bolj dragocen. Je vrhunsko orodje med diagnostičnimi orodji. Če se s Tracy srečate prvič, verjemite, da se vaše življenje začne deliti na tisto pred Tracy in tisto z njo. Dobrodošli v dobrem delu!
Namestitev in zahteve
Tracy najbolje namestite tako, da prenesete najnovejši paket ali uporabite Composer:
composer require tracy/tracy
lahko prenesete tudi celoten paket ali datoteko tracy.phar.
Uporaba
Aktivacija programa Tracy je preprosta. Preprosto dodajte ti dve vrstici kode, po možnosti takoj po nalaganju knjižnice (kot
require 'vendor/autoload.php'
) in preden se v brskalnik pošlje kakršen koli izpis:
use Tracy\Debugger;
Debugger::enable();
Prva stvar, ki jo boste opazili na spletnem mestu, je vrstica Tracy.
(Če ne vidite ničesar, to pomeni, da Tracy deluje v produkcijskem načinu. Zaradi varnostnih razlogov je Tracy viden samo na
lokalnem gostitelju. Tracy lahko prisilite, da teče v razvojnem načinu, tako da kot prvi parameter metode enable()
posredujete Debugger::Development
).
Metoda enable()
vključuje spremembo ravni poročanja o napakah na E_ALL.
Tracy Bar
Tracy Bar je plavajoča plošča. Prikazana je v spodnjem desnem kotu strani. Premikate jo lahko z miško. Po ponovnem nalaganju strani si bo zapomnila svoj položaj.
V vrstico Tracy lahko dodate druge uporabne plošče. Zanimive lahko najdete v dodatkih ali pa ustvarite svoje.
Če ne želite prikazati Tracy Bar, nastavite:
Debugger::$showBar = false;
Vizualizacija napak in izjem
Zagotovo veste, kako PHP sporoča napake: v izvorni kodi strani je nekaj takega:
Parse error: syntax error, unexpected '}' in HomePresenter.php on line 15
ali nezajeta izjema:
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
Prehajanje po tem izpisu ni tako enostavno. Če omogočite funkcijo Tracy, so napake in izjeme prikazane v povsem drugačni obliki:

Sporočilo o napaki dobesedno kriči. Vidite lahko del izvorne kode s poudarjeno vrstico, v kateri se je pojavila napaka. Sporočilo jasno pojasnjuje napako. Celotno spletno mesto je interaktivno, poskusite ga.
In veste kaj? Usodne napake so zajete in prikazane na enak način. Ni treba namestiti nobene razširitve (kliknite za primer v živo):

Napake, kot sta tiskarska napaka v imenu spremenljivke ali poskus odpiranja neobstoječe datoteke, ustvarijo poročila ravni E_NOTICE ali E_WARNING. Te napake je mogoče zlahka spregledati in/ali so lahko popolnoma skrite v grafični postavitvi spletne strani. Naj jih upravlja podjetje Tracy:
Lahko pa se prikažejo kot napake:
Debugger::$strictMode = true; // prikaz vseh napak
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // vse napake, razen zastarelih obvestil

Za odkrivanje pravopisnih napak pri pripisovanju objektu uporabljamo lastnost Nette\SmartObject.
Produkcijski način in beleženje napak
Kot lahko vidite, je Tracy zelo zgovoren. V razvojnem okolju je to cenjeno, v produkcijskem strežniku pa bi to povzročilo katastrofo. Tam ni mogoče navesti nobenih informacij o odpravljanju napak. Zato ima Tracy funkcijo samodejnega zaznavanja okolja in beleženja. Namesto da bi se prikazala sama, Tracy informacije shrani v datoteko dnevnika in obiskovalcu prikaže uporabniku nerazumljivo sporočilo o napaki strežnika:

Način produkcijskega izpisa izključuje vse informacije za odpravljanje napak, ki se pošljejo prek funkcije dump(), in seveda vsa sporočila o napakah, ki jih ustvari PHP. Torej, tudi
če v izvorni kodi pozabite na dump($obj)
, vam za to v produkcijskem strežniku ni treba skrbeti. Nič se ne bo
videlo.
Način izpisa je določen s prvim parametrom Debugger::enable()
. Določite lahko konstanto
Debugger::Production
ali Debugger::Development
. Druga možnost je, da ga nastavite tako, da bo razvojni
način vklopljen, ko bo aplikacija dostopna z določenega naslova IP z določeno vrednostjo piškotka tracy-debug
.
Sintaksa, ki se uporablja za dosego tega, je cookie-value@ip-address
.
Če ni določena, se uporabi privzeta vrednost Debugger::Detect
. V tem primeru sistem zazna strežnik po naslovu
IP. Produkcijski način se izbere, če je aplikacija dostopna prek javnega naslova IP. Lokalni naslov IP vodi v razvojni način.
V večini primerov načina ni treba določiti. Način je pravilno prepoznan, ko zaženete aplikacijo v lokalnem strežniku ali
v produkcijskem strežniku.
V produkcijskem načinu Tracy samodejno zajame vse napake in izjeme v besedilni dnevnik. Če ne določite drugače, bo shranjen v dnevnik log/error.log. To beleženje napak je izjemno uporabno. Predstavljajte si, da so vsi uporabniki vaše aplikacije pravzaprav betatesterji. Pri lovljenju napak brezplačno opravljajo vrhunsko delo in neumno bi bilo, če bi njihova dragocena poročila neopaženo odvrgli v koš za smeti.
Če morate zabeležiti svoja sporočila ali ujete izjeme, uporabite metodo log()
:
Debugger::log('Unexpected error'); // besedilno sporočilo
try {
criticalOperation();
} catch (Exception $e) {
Debugger::log($e); // izjema v dnevniku
// ali
Debugger::log($e, Debugger::ERROR); // pošlje tudi e-poštno obvestilo
}
Imenik za beleženje napak lahko nastavite z drugim parametrom metode enable():
Debugger::enable(Debugger::Detect, __DIR__ . '/mylog');
Če želite, da Tracy beleži napake PHP, kot sta E_NOTICE
ali E_WARNING
, s podrobnimi informacijami
(poročilo HTML), nastavite Debugger::$logSeverity
:
Debugger::$logSeverity = E_NOTICE | E_WARNING;
Za pravega strokovnjaka je dnevnik napak ključni vir informacij in želi biti takoj obveščen o vsaki novi napaki. Tracy mu pri tem pomaga. Sposobna je poslati e-poštno sporočilo za vsak nov zapis o napaki. Spremenljivka $email določa, kam naj se ta e-poštna sporočila pošljejo:
Debugger::$email = 'admin@example.com';
Če uporabljate celotno ogrodje Nette, lahko to in druge nastavite v konfiguracijski datoteki.
Za zaščito e-poštnega predala pred poplavo Tracy pošlje pougo eno sporočilo in ustvari datoteko
email-sent
. Ko razvijalec prejme e-poštno obvestilo, preveri dnevnik, popravi svojo aplikacijo in izbriše datoteko
za spremljanje email-sent
. S tem se ponovno aktivira pošiljanje e-pošte.
Odpiranje datotek v urejevalniku
Ko je prikazana stran z napako, lahko kliknete na imena datotek in te se bodo odprle v urejevalniku s kazalcem na ustrezni
vrstici. Datoteke lahko tudi ustvarite (dejanje create file
) ali v njih odpravite napake (dejanje
fix it
). Da bi to lahko storili, morate konfigurirati
brskalnik in sistem.
Podprte različice PHP
Tracy | združljivo s PHP |
---|---|
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 |
Velja za najnovejše različice popravkov.
Pristanišča
To je seznam neuradnih portov za druga ogrodja in CMS:
- 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