Διαγνωστικά μηνύματα#

Όταν ένα πρόγραμμα πάει στραβά, η Perl σας ενημερώνει γι” αυτό. Ορισμένα διαγνωστικά σταματούν το πρόγραμμα (μοιραία σφάλματα τύπου die)· άλλα εκτυπώνουν μια γραμμή στο STDERR και το αφήνουν να συνεχίσει (προειδοποιήσεις). Αυτή η αναφορά παραθέτει τα διαγνωστικά που εκπέμπει η PetaPerl, ομαδοποιημένα ανάλογα με το από πού προέρχονται, μαζί με την αιτία και τη διόρθωση για το καθένα.

Κάθε καταχώριση δείχνει το μήνυμα αυτολεξεί μέσα σε ένα code span - το ακριβές κείμενο που εκτυπώνει ο διερμηνέας, με τα σύμβολα κράτησης θέσης (%s, %d, μια ονομασμένη μεταβλητή) να εμφανίζονται όπως φαίνονται στην έξοδο. Αναζητήστε σε αυτή τη σελίδα τις αυτούσιες λέξεις που είδατε στο STDERR και θα καταλήξετε στην καταχώριση.

Ανάγνωση μιας καταχώρισης#

Κάθε καταχώριση ανοίγει με το κείμενο του μηνύματος, έπειτα με ένα σύντομο σήμα ταξινόμησης σε παρενθέσεις, και κατόπιν με την αιτία και τη διόρθωση:

`Illegal division by zero`   (F) Διαιρέσατε με το μηδέν. Προστατεύστε τον διαιρέτη.

Το σήμα ακολουθεί τον ίδιο γραμματικό κωδικό που χρησιμοποιεί ανέκαθεν η Perl:

Κωδικός

Σημασία

W

Μια προειδοποίηση - εκτυπώνεται μόνο όταν είναι ενεργοποιημένες οι προειδοποιήσεις. Προαιρετικά περιορισμένη σε μια κατηγορία (εμφανίζεται ως (W category)).

D

Μια απαξίωση - μια προειδοποίηση ότι ένα χαρακτηριστικό βαίνει προς κατάργηση.

S

Μια σοβαρή προειδοποίηση - ενεργή από προεπιλογή, αλλά παρ” όλα αυτά μόνο προειδοποίηση.

F

Ένα μοιραίο σφάλμα - το πρόγραμμα τερματίζεται εκτός αν το σφάλμα παγιδευτεί (eval, try).

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 απλώς δεν το εκπέμπει ποτέ.

Τα διαγνωστικά#