Διαγνωστικά μηνύματα#
Όταν ένα πρόγραμμα πάει στραβά, η Perl σας ενημερώνει γι” αυτό. Ορισμένα διαγνωστικά σταματούν το πρόγραμμα (μοιραία σφάλματα τύπου die)· άλλα εκτυπώνουν μια γραμμή στο STDERR και το αφήνουν να συνεχίσει (προειδοποιήσεις). Αυτή η αναφορά παραθέτει τα διαγνωστικά που εκπέμπει η PetaPerl, ομαδοποιημένα ανάλογα με το από πού προέρχονται, μαζί με την αιτία και τη διόρθωση για το καθένα.
Κάθε καταχώριση δείχνει το μήνυμα αυτολεξεί μέσα σε ένα code span - το ακριβές κείμενο που εκτυπώνει ο διερμηνέας, με τα σύμβολα κράτησης θέσης (%s, %d, μια ονομασμένη μεταβλητή) να εμφανίζονται όπως φαίνονται στην έξοδο. Αναζητήστε σε αυτή τη σελίδα τις αυτούσιες λέξεις που είδατε στο STDERR και θα καταλήξετε στην καταχώριση.
Ανάγνωση μιας καταχώρισης#
Κάθε καταχώριση ανοίγει με το κείμενο του μηνύματος, έπειτα με ένα σύντομο σήμα ταξινόμησης σε παρενθέσεις, και κατόπιν με την αιτία και τη διόρθωση:
`Illegal division by zero`(F) Διαιρέσατε με το μηδέν. Προστατεύστε τον διαιρέτη.
Το σήμα ακολουθεί τον ίδιο γραμματικό κωδικό που χρησιμοποιεί ανέκαθεν η Perl:
Κωδικός | Σημασία |
|---|---|
W | Μια προειδοποίηση - εκτυπώνεται μόνο όταν είναι ενεργοποιημένες οι προειδοποιήσεις. Προαιρετικά περιορισμένη σε μια κατηγορία (εμφανίζεται ως |
D | Μια απαξίωση - μια προειδοποίηση ότι ένα χαρακτηριστικό βαίνει προς κατάργηση. |
S | Μια σοβαρή προειδοποίηση - ενεργή από προεπιλογή, αλλά παρ” όλα αυτά μόνο προειδοποίηση. |
F | Ένα μοιραίο σφάλμα - το πρόγραμμα τερματίζεται εκτός αν το σφάλμα παγιδευτεί ( |
P | Ένα εσωτερικό σφάλμα (ένα panic) - δεν θα έπρεπε ποτέ να φτάσει σε χρήστη. Αν δείτε κάποιο, είναι σφάλμα στο pperl. |
X | Ένα πολύ μοιραίο σφάλμα - το πρόγραμμα τερματίζει αμέσως. |
A | Ένα ξένο σφάλμα - παράγεται από κάτι άλλο εκτός της ίδιας της Perl. |
Ενεργοποίηση και σίγαση προειδοποιήσεων#
Οι προειδοποιήσεις (οι κλάσεις W, D, και S) ελέγχονται από την pragma warnings. Χωρίς αυτήν, εκτυπώνονται μόνο οι σοβαρές (S) προειδοποιήσεις:
use warnings; # turn on every warning
no warnings; # turn them all off (lexically)
no warnings 'uninitialized'; # turn off one category
use warnings FATAL => 'all'; # promote warnings to fatal errors
Η κατηγορία που ονομάζεται σε ένα σήμα (W category) είναι η συμβολοσειρά που περνάτε στο no warnings για να σιγάσετε μόνο αυτό το διαγνωστικό. Ένας μόνο χειριστής $SIG{__WARN__} μπορεί να υποκλέψει κάθε προειδοποίηση κατά τον χρόνο εκτέλεσης· το $SIG{__DIE__} κάνει το ίδιο για τα μοιραία σφάλματα. Δείτε %SIG.
Μια σημείωση για τη φορητότητα#
Η PetaPerl τρέχει μόνο σε Linux και δεν διαθέτει στρώμα XS. Οι οικογένειες διαγνωστικών πλατφόρμας που κουβαλά μια φορητή perl - κωδικοί κατάστασης VMS, κείμενο GetLastError του Win32, ειδοποιήσεις «unimplemented on this architecture», αποτυχίες του XS-loader - δεν προκύπτουν επομένως εδώ. Όπου η upstream Perl τεκμηριώνει ένα διαγνωστικό που ενεργοποιείται μόνο σε άλλο λειτουργικό σύστημα ή μέσω XS, η PetaPerl απλώς δεν το εκπέμπει ποτέ.
Τα διαγνωστικά#
Γενικά μοιραία σφάλματα - επίλυση μεθόδων, αναφορές, αριθμητική, περιορισμένα hashes, filehandles, και τα υπόλοιπα
dieτου χρόνου εκτέλεσης που δεν αφορούν ειδικά regex ή τον αναλυτή.Σφάλματα μεταγλώττισης regex - οτιδήποτε απορρίπτει ο μεταγλωττιστής μοτίβων, από το
Unmatched )μέχρι τις κακοσχηματισμένες κατασκευές\g,\N,\o, και(?...).Συντακτικά σφάλματα κατά τη μεταγλώττιση - σφάλματα που εγείρουν ο αναλυτής και η παραγωγή κώδικα πριν εκτελεστεί το πρόγραμμα.
Προειδοποιήσεις - τα μη μοιραία διαγνωστικά: βαθιά αναδρομή, ευρείς χαρακτήρες, άχρηστες κατασκευές.
Σφάλματα τιμών και τύπων - διαγνωστικά για το τι είναι και τι δεν είναι μια τιμή: όχι αναφορά, όχι αναφορά κώδικα, διαίρεση με το μηδέν, πρόσβαση σε περιορισμένο hash.
Εσωτερικά σφάλματα - τα panics που σηματοδοτούν ένα σφάλμα στην ίδια την pperl.
Διαγνωστικά ειδικά για το pperl - μηνύματα που εκπέμπει η PetaPerl και τα οποία δεν έχουν αντίστοιχο στην upstream Perl.