Ξεκινώντας με την Tracy

Η βιβλιοθήκη Tracy είναι ένα χρήσιμο βοήθημα για τους καθημερινούς προγραμματιστές PHP. Σας βοηθάει να:

  • να εντοπίζετε και να διορθώνετε γρήγορα σφάλματα
  • να καταγράφετε σφάλματα
  • να απορρίπτετε μεταβλητές
  • να μετράτε το χρόνο εκτέλεσης των σεναρίων/ερωτήσεων
  • δείτε την κατανάλωση μνήμης

Η PHP είναι μια τέλεια γλώσσα για την κατασκευή δύσκολα ανιχνεύσιμων σφαλμάτων, επειδή δίνει μεγάλη ευελιξία στους προγραμματιστές. Το Tracy\Debugger είναι πιο πολύτιμο εξαιτίας αυτού. Είναι ένα απόλυτο εργαλείο μεταξύ των διαγνωστικών εργαλείων.

Αν συναντάτε την Tracy για πρώτη φορά, πιστέψτε με, η ζωή σας αρχίζει να χωρίζεται σε μία πριν την Tracy και σε μία μαζί της. Καλώς ήρθατε στο καλό μέρος!

Εγκατάσταση και απαιτήσεις

Ο καλύτερος τρόπος για να εγκαταστήσετε το Tracy είναι να κατεβάσετε το τελευταίο πακέτο ή να χρησιμοποιήσετε το Composer:

composer require tracy/tracy

Εναλλακτικά, μπορείτε να κατεβάσετε ολόκληρο το πακέτο ή το αρχείο tracy.phar.

Χρήση

Το Tracy ενεργοποιείται με την κλήση της μεθόδου `Tracy\Debugger::enable()' το συντομότερο δυνατό στην αρχή του προγράμματος, πριν από την αποστολή οποιασδήποτε εξόδου:

use Tracy\Debugger;

require 'vendor/autoload.php'; // εναλλακτικά tracy.phar

Debugger::enable();

Το πρώτο πράγμα που θα παρατηρήσετε στη σελίδα είναι η μπάρα Tracy στην κάτω δεξιά γωνία. Αν δεν την βλέπετε, αυτό μπορεί να σημαίνει ότι το Tracy λειτουργεί σε κατάσταση παραγωγής. Αυτό συμβαίνει επειδή το Tracy είναι ορατό μόνο στο localhost για λόγους ασφαλείας. Για να ελέγξετε αν λειτουργεί, μπορείτε να το θέσετε προσωρινά σε κατάσταση ανάπτυξης χρησιμοποιώντας την παράμετρο Debugger::enable(Debugger::Development).

Γραμμή 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; // όλα τα σφάλματα εκτός από τις απαρχαιωμένες ειδοποιήσεις

Σημείωση: Το Tracy όταν ενεργοποιείται αλλάζει το επίπεδο αναφοράς σφαλμάτων σε E_ALL. Αν θέλετε να το αλλάξετε αυτό, κάντε το μετά την κλήση του enable().

Λειτουργία ανάπτυξης έναντι λειτουργίας παραγωγής

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

Η λειτουργία παραγωγής καταστέλλει την εμφάνιση όλων των πληροφοριών εντοπισμού σφαλμάτων που αποστέλλονται με τη χρήση της dump() και φυσικά όλων των μηνυμάτων σφάλματος που παράγει η PHP. Έτσι, αν έχετε ξεχάσει κάποιο dump($obj) στον κώδικα, δεν χρειάζεται να ανησυχείτε, τίποτα δεν θα εμφανιστεί στον διακομιστή παραγωγής.

Πώς λειτουργεί η αυτόματη ανίχνευση λειτουργίας; Ο τρόπος λειτουργίας είναι η ανάπτυξη, εάν η εφαρμογή εκτελείται σε localhost (δηλ. διεύθυνση IP 127.0.0.1 ή ::1) και δεν υπάρχει proxy (δηλ. η επικεφαλίδα HTTP του). Διαφορετικά, εκτελείται σε κατάσταση παραγωγής.

Αν θέλετε να ενεργοποιήσετε τη λειτουργία ανάπτυξης σε άλλες περιπτώσεις, για παράδειγμα για προγραμματιστές που έχουν πρόσβαση από μια συγκεκριμένη διεύθυνση IP, μπορείτε να την καθορίσετε ως παράμετρο της μεθόδου enable():

Debugger::enable('23.75.345.200'); // μπορείτε επίσης να δώσετε μια σειρά διευθύνσεων IP

Συνιστούμε οπωσδήποτε τον συνδυασμό της διεύθυνσης IP με ένα cookie. Αποθηκεύστε ένα μυστικό κουπόνι, π.χ. secret1234, στο cookie tracy-debug και, με αυτόν τον τρόπο, ενεργοποιήστε τη λειτουργία ανάπτυξης μόνο για προγραμματιστές που έχουν πρόσβαση από συγκεκριμένη διεύθυνση IP και διαθέτουν το αναφερόμενο κουπόνι στο cookie:

Debugger::enable('secret1234@23.75.345.200');

Μπορείτε επίσης να ορίσετε απευθείας τη λειτουργία ανάπτυξης/παραγωγής χρησιμοποιώντας τις σταθερές Debugger::Development ή Debugger::Production ως παράμετρο της μεθόδου enable().

Αν χρησιμοποιείτε το Nette Framework, ρίξτε μια ματιά στον τρόπο ορισμού της λειτουργίας για αυτό, και στη συνέχεια θα χρησιμοποιηθεί και για το Tracy.

Καταγραφή σφαλμάτων

Στη λειτουργία παραγωγής, το Tracy καταγράφει αυτόματα όλα τα σφάλματα και τις εξαιρέσεις σε ένα αρχείο καταγραφής κειμένου. Για να πραγματοποιηθεί η καταγραφή, πρέπει να ορίσετε την απόλυτη διαδρομή προς τον κατάλογο καταγραφής στη μεταβλητή $logDirectory ή να την περάσετε ως δεύτερη παράμετρο στη μέθοδο enable():

Debugger::$logDirectory = __DIR__ . '/log';

Η καταγραφή σφαλμάτων είναι εξαιρετικά χρήσιμη. Φανταστείτε ότι όλοι οι χρήστες της εφαρμογής σας είναι στην πραγματικότητα δοκιμαστές beta που κάνουν κορυφαία δουλειά στην εύρεση σφαλμάτων δωρεάν και θα ήταν ανόητο να πετάξετε τις πολύτιμες αναφορές τους απαρατήρητες στον κάδο απορριμμάτων.

Αν πρέπει να καταγράψετε τα δικά σας μηνύματα ή τις εξαιρέσεις που πιάσατε, χρησιμοποιήστε τη μέθοδο log():

Debugger::log('Unexpected error'); // μήνυμα κειμένου

try {
	criticalOperation();
} catch (Exception $e) {
	Debugger::log($e); // εξαίρεση καταγραφής
	// ή
	Debugger::log($e, Debugger::ERROR); // στέλνει επίσης ειδοποίηση μέσω email
}

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;

Για έναν πραγματικό επαγγελματία το αρχείο καταγραφής σφαλμάτων είναι μια κρίσιμη πηγή πληροφοριών και θέλει να ενημερώνεται αμέσως για κάθε νέο σφάλμα. Το 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.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

Ισχύει για τις τελευταίες εκδόσεις διορθώσεων.

Λιμάνια

Αυτή είναι μια λίστα με ανεπίσημες μεταφορές σε άλλα πλαίσια και CMS: