Ξεκινώντας με την Tracy
Η βιβλιοθήκη Tracy είναι ένα χρήσιμο βοήθημα για τους καθημερινούς προγραμματιστές PHP. Σας βοηθάει να:
- να εντοπίζετε και να διορθώνετε γρήγορα σφάλματα
- να καταγράφετε σφάλματα
- να απορρίπτετε μεταβλητές
- να μετράτε το χρόνο εκτέλεσης των σεναρίων/ερωτήσεων
- δείτε την κατανάλωση μνήμης
Η PHP είναι μια τέλεια γλώσσα για την κατασκευή δύσκολα ανιχνεύσιμων σφαλμάτων, επειδή δίνει μεγάλη ευελιξία στους προγραμματιστές. Το Tracy\Debugger είναι πιο πολύτιμο εξαιτίας αυτού. Είναι ένα απόλυτο εργαλείο μεταξύ των διαγνωστικών εργαλείων. Αν συναντάτε την Tracy για πρώτη φορά, πιστέψτε με, η ζωή σας αρχίζει να χωρίζεται σε μία πριν την Tracy και σε μία μαζί της. Καλώς ήρθατε στο καλό μέρος!
Εγκατάσταση και απαιτήσεις
Ο καλύτερος τρόπος για να εγκαταστήσετε το Tracy είναι να κατεβάσετε το τελευταίο πακέτο ή να χρησιμοποιήσετε το Composer:
composer require tracy/tracy
Εναλλακτικά, μπορείτε να κατεβάσετε ολόκληρο το πακέτο ή το αρχείο tracy.phar.
Χρήση
Η ενεργοποίηση του Tracy είναι εύκολη. Απλά προσθέστε αυτές τις δύο
γραμμές κώδικα, κατά προτίμηση αμέσως μετά τη φόρτωση της βιβλιοθήκης
(όπως require 'vendor/autoload.php'
) και πριν από την αποστολή οποιασδήποτε
εξόδου στο πρόγραμμα περιήγησης:
use Tracy\Debugger;
Debugger::enable();
Το πρώτο πράγμα που θα παρατηρήσετε στον ιστότοπο είναι μια μπάρα Tracy.
(Αν δεν βλέπετε τίποτα, αυτό σημαίνει ότι το Tracy λειτουργεί σε
κατάσταση παραγωγής. Για λόγους ασφαλείας, το Tracy είναι ορατό μόνο στο
localhost. Μπορείτε να αναγκάσετε το Tracy να εκτελείται σε κατάσταση
ανάπτυξης περνώντας το Debugger::Development
ως πρώτη παράμετρο της
μεθόδου enable()
).
Το enable()
περιλαμβάνει την αλλαγή του επιπέδου αναφοράς
σφαλμάτων σε E_ALL.
Γραμμή Tracy
Το Tracy Bar είναι ένας πλωτός πίνακας. Εμφανίζεται στην κάτω δεξιά γωνία μιας σελίδας. Μπορείτε να το μετακινήσετε χρησιμοποιώντας το ποντίκι. Θα θυμάται τη θέση της μετά την επαναφόρτωση της σελίδας.
Μπορείτε να προσθέσετε και άλλα χρήσιμα πάνελ στη γραμμή Tracy Bar. Μπορείτε να βρείτε ενδιαφέροντα σε πρόσθετα ή να δημιουργήσετε τα δικά σας.
Αν δεν θέλετε να εμφανίζεται το Tracy Bar, ορίστε:
Debugger::$showBar = false;
Οπτικοποίηση σφαλμάτων και εξαιρέσεων
Σίγουρα, γνωρίζετε πώς η PHP αναφέρει τα σφάλματα: υπάρχει κάτι τέτοιο στον πηγαίο κώδικα της σελίδας:
Parse error: syntax error, unexpected '}' in HomePresenter.php on line 15
or uncaught exception:
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
Δεν είναι τόσο εύκολο να πλοηγηθείτε σε αυτή την έξοδο. Εάν ενεργοποιήσετε την επιλογή Tracy, τόσο τα σφάλματα όσο και οι εξαιρέσεις εμφανίζονται με εντελώς διαφορετική μορφή:

Το μήνυμα σφάλματος κυριολεκτικά φωνάζει. Μπορείτε να δείτε ένα μέρος του πηγαίου κώδικα με την υπογραμμισμένη γραμμή όπου εμφανίστηκε το σφάλμα. Ένα μήνυμα εξηγεί με σαφήνεια ένα σφάλμα. Ολόκληρος ο ιστότοπος είναι διαδραστικός, δοκιμάστε τον.
Και ξέρετε κάτι; Τα μοιραία σφάλματα καταγράφονται και εμφανίζονται με τον ίδιο τρόπο. Δεν χρειάζεται να εγκαταστήσετε καμία επέκταση (κάντε κλικ για ζωντανό παράδειγμα):

Σφάλματα όπως ένα τυπογραφικό λάθος στο όνομα μιας μεταβλητής ή μια προσπάθεια ανοίγματος ενός ανύπαρκτου αρχείου δημιουργούν αναφορές επιπέδου E_NOTICE ή E_WARNING. Αυτά μπορούν εύκολα να παραβλεφθούν ή/και να κρυφτούν εντελώς στη γραφική διάταξη μιας ιστοσελίδας. Αφήστε την Tracy να τα διαχειριστεί:
Ή μπορεί να εμφανίζονται σαν σφάλματα:
Debugger::$strictMode = true; // εμφάνιση όλων των σφαλμάτων
Debugger::$strictMode = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED; // όλα τα σφάλματα εκτός από τις απαρχαιωμένες ειδοποιήσεις

Για να ανιχνεύσουμε ορθογραφικά λάθη κατά την ανάθεση σε ένα αντικείμενο, χρησιμοποιούμε το χαρακτηριστικό Nette\SmartObject.
Λειτουργία παραγωγής και καταγραφή σφαλμάτων
Όπως μπορείτε να δείτε, η Tracy είναι αρκετά εύγλωττη. Εκτιμάται σε ένα περιβάλλον ανάπτυξης, αλλά σε έναν διακομιστή παραγωγής, θα προκαλούσε καταστροφή. Οποιαδήποτε πληροφορία εντοπισμού σφαλμάτων δεν μπορεί να καταχωρηθεί εκεί. Για το λόγο αυτό το Tracy διαθέτει μια λειτουργία αυτόματης ανίχνευσης περιβάλλοντος και καταγραφής. Αντί να εμφανίζεται η ίδια, η Tracy αποθηκεύει πληροφορίες σε ένα αρχείο καταγραφής και εμφανίζει στον επισκέπτη ένα κατανοητό από τον χρήστη μήνυμα σφάλματος διακομιστή:

Η λειτουργία εξόδου παραγωγής καταστέλλει όλες τις πληροφορίες
εντοπισμού σφαλμάτων που αποστέλλονται μέσω της dump() και φυσικά όλα τα μηνύματα σφάλματος που
παράγονται από την PHP. Έτσι, ακόμη και αν ξεχάσετε το dump($obj)
στον
πηγαίο κώδικα, δεν χρειάζεται να ανησυχείτε γι' αυτό στον διακομιστή
παραγωγής σας. Τίποτα δεν θα γίνει αντιληπτό.
Ο τρόπος εξόδου ορίζεται από την πρώτη παράμετρο του
Debugger::enable()
. Μπορείτε να καθορίσετε είτε μια σταθερά
Debugger::Production
είτε Debugger::Development
. Άλλη επιλογή είναι να το
ρυθμίσετε με τέτοιο τρόπο, ώστε η λειτουργία ανάπτυξης να
ενεργοποιείται όταν η εφαρμογή προσπελαύνεται από μια καθορισμένη
διεύθυνση IP με μια καθορισμένη τιμή του cookie tracy-debug
. Η σύνταξη που
χρησιμοποιείται για να επιτευχθεί αυτό είναι cookie-value@ip-address
.
Εάν δεν καθοριστεί, χρησιμοποιείται η προεπιλεγμένη τιμή
Debugger::Detect
. Σε αυτή την περίπτωση, το σύστημα ανιχνεύει έναν
διακομιστή από τη διεύθυνση IP. Η λειτουργία παραγωγής επιλέγεται εάν η
πρόσβαση σε μια εφαρμογή γίνεται μέσω μιας δημόσιας διεύθυνσης IP. Μια
τοπική διεύθυνση IP οδηγεί στη λειτουργία ανάπτυξης. Δεν είναι
απαραίτητο να οριστεί η λειτουργία στις περισσότερες περιπτώσεις. Η
λειτουργία αναγνωρίζεται σωστά όταν ξεκινάτε την εφαρμογή στον τοπικό
διακομιστή σας ή στην παραγωγή.
Στη λειτουργία παραγωγής, το Tracy καταγράφει αυτόματα όλα τα σφάλματα και τις εξαιρέσεις σε ένα αρχείο καταγραφής κειμένου. Αν δεν ορίσετε διαφορετικά, θα αποθηκεύεται στο αρχείο log/error.log. Αυτή η καταγραφή σφαλμάτων είναι εξαιρετικά χρήσιμη. Φανταστείτε, ότι όλοι οι χρήστες της εφαρμογής σας είναι στην πραγματικότητα betatesters. Κάνουν δουλειά αιχμής δωρεάν όταν κυνηγούν σφάλματα και θα ήσασταν ανόητοι αν πετάγατε τις πολύτιμες αναφορές τους σε έναν κάδο ανακύκλωσης χωρίς να τις καταλάβετε.
Αν πρέπει να καταγράψετε τα δικά σας μηνύματα ή τις εξαιρέσεις που
πιάσατε, χρησιμοποιήστε τη μέθοδο log()
:
Debugger::log('Unexpected error'); // μήνυμα κειμένου
try {
criticalOperation();
} catch (Exception $e) {
Debugger::log($e); // εξαίρεση καταγραφής
// ή
Debugger::log($e, Debugger::ERROR); // στέλνει επίσης ειδοποίηση μέσω email
}
Ένας κατάλογος για την καταγραφή σφαλμάτων μπορεί να οριστεί από τη δεύτερη παράμετρο της μεθόδου enable():
Debugger::enable(Debugger::Detect, __DIR__ . '/mylog');
Αν θέλετε το Tracy να καταγράφει σφάλματα PHP όπως E_NOTICE
ή
E_WARNING
με λεπτομερείς πληροφορίες (αναφορά HTML), ορίστε το
Debugger::$logSeverity
:
Debugger::$logSeverity = E_NOTICE | E_WARNING;
Για έναν πραγματικό επαγγελματία το αρχείο καταγραφής σφαλμάτων είναι μια κρίσιμη πηγή πληροφοριών και θέλει να ενημερώνεται αμέσως για κάθε νέο σφάλμα. Το Tracy τον βοηθάει. Είναι σε θέση να στέλνει ένα μήνυμα ηλεκτρονικού ταχυδρομείου για κάθε νέα εγγραφή σφάλματος. Η μεταβλητή $email προσδιορίζει πού θα στέλνει αυτά τα μηνύματα ηλεκτρονικού ταχυδρομείου:
Debugger::$email = 'admin@example.com';
Εάν χρησιμοποιείτε ολόκληρο το Nette Framework, μπορείτε να ορίσετε αυτήν και άλλες στο αρχείο ρυθμίσεων.
Για να προστατέψει το ηλεκτρονικό σας ταχυδρομείο από πλημμύρες, το
Tracy στέλνει μόνο ένα μήνυμα και δημιουργεί ένα αρχείο email-sent
.
Όταν ένας προγραμματιστής λαμβάνει την ειδοποίηση ηλεκτρονικού
ταχυδρομείου, ελέγχει το αρχείο καταγραφής, διορθώνει την εφαρμογή του
και διαγράφει το αρχείο παρακολούθησης email-sent
. Αυτό ενεργοποιεί
και πάλι την αποστολή ηλεκτρονικού ταχυδρομείου.
Άνοιγμα αρχείων στον επεξεργαστή
Όταν εμφανίζεται η σελίδα σφαλμάτων, μπορείτε να κάνετε κλικ σε
ονόματα αρχείων και αυτά θα ανοίξουν στον επεξεργαστή σας με τον
κέρσορα στην αντίστοιχη γραμμή. Μπορείτε επίσης να δημιουργήσετε
αρχεία (ενέργεια create file
) ή να διορθώσετε σφάλματα σε αυτά
(ενέργεια fix it
). Για να το κάνετε αυτό, πρέπει να ρυθμίσετε το πρόγραμμα περιήγησης και το
σύστημα.
Υποστηριζόμενες εκδόσεις PHP
Tracy | συμβατή με 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 |
Ισχύει για τις τελευταίες εκδόσεις διορθώσεων.
Λιμάνια
Αυτή είναι μια λίστα με ανεπίσημες μεταφορές σε άλλα πλαίσια και 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