1. Χειρισμός εξαίρεσης (οι περισσότερες γλώσσες):
Οι περισσότερες σύγχρονες γλώσσες έχουν μηχανισμούς χειρισμού εξαίρεσης. Η βασική ιδέα είναι να πιάσει εξαιρέσεις και να εξαγάγετε πληροφορίες σχετικά με το πού προέρχονται. Αυτό περιλαμβάνει συχνά το όνομα αρχείου και τον αριθμό γραμμής.
* Python:
`` `Python
εισαγωγή εντοπισμού
δοκιμή:
# Κάποιος κωδικός που μπορεί να δημιουργήσει μια εξαίρεση
Αποτέλεσμα =10/0
εκτός από την εξαίρεση ως e:
traceback.print_exc () # Εκτυπώνει το πλήρες traceback, συμπεριλαμβανομένου του ονόματος αρχείου και του αριθμού γραμμής
`` `
`traceback.print_exc ()` είναι κρίσιμο εδώ. Ένα απλό `print (e)` μπορεί να εμφανίζει μόνο τον τύπο και το μήνυμα εξαίρεσης, όχι τη θέση.
* java:
`` `java
Δοκιμάστε {
// κάποιο κώδικα που μπορεί να δημιουργήσει μια εξαίρεση
int αποτέλεσμα =10/0;
} catch (arithmeticexception e) {
e.printStackTrace (); // εκτυπώνει το ίχνος στοίβας με όνομα αρχείου και αριθμό γραμμής
}
`` `
`e.printStackTrace ()` Παρέχει παρόμοια λειτουργικότητα με το `traceback.print_exc () της Python.
* C ++:
Το C ++ δεν έχει ενσωματωμένο χειρισμό εξαίρεσης τόσο κομψό όσο η Python ή η Java. Θα χρειαστεί να χρησιμοποιήσετε εργαλεία εντοπισμού σφαλμάτων ή βιβλιοθήκες όπως το `libunwind` για να λάβετε λεπτομερείς πληροφορίες ιχνοστοιχείων στοίβας. Αυτό είναι πιο περίπλοκο και συχνά απαιτεί σημαίες μεταγλωττιστή και συνδέσμου για να ενεργοποιήσετε τα σύμβολα εντοπισμού σφαλμάτων. Ο βασικός χειρισμός σφαλμάτων μπορεί απλώς να περιλαμβάνει την καταγραφή του σφάλματος με το `perror` το οποίο δεν παρέχει πληροφορίες ονόματος αρχείου.
* javascript (node.js):
`` `javascript
Δοκιμάστε {
// κάποιο κωδικό που μπορεί να ρίξει ένα σφάλμα
ας είναι αποτέλεσμα =10/0;
} catch (σφάλμα) {
console.error (error.stack); // εκτυπώνει το ίχνος στοίβας συμπεριλαμβανομένου του ονόματος αρχείου και του αριθμού γραμμής
}
`` `
2. Οδηγίες προεπεξεργαστών (C/C ++):
Στο C και C ++, μπορείτε να χρησιμοποιήσετε τον προεπεξεργαστή για να εισαγάγετε το όνομα αρχείου στον κωδικό σας:
`` c ++
#include
#define file_name __file__
int main () {
Δοκιμάστε {
int αποτέλεσμα =10/0;
} catch (const std ::εξαίρεση &e) {
std ::cerr <<"Σφάλμα στο αρχείο:" <
}
επιστροφή 0;
}
`` `
`__File__` είναι μια μακροεντολή προεπεξεργαστή που επεκτείνεται στο όνομα του τρέχοντος αρχείου. Αυτό είναι λιγότερο εξελιγμένο από το ίχνος στοίβας χειρισμού εξαιρέσεων, καθώς δίνει μόνο το όνομα αρχείου της θέσης άμεσης σφάλματος, όχι η αλυσίδα των κλήσεων λειτουργίας που οδηγούν σε αυτήν.
3. Βιβλιοθήκες καταγραφής:
Πολλές βιβλιοθήκες καταγραφής (όπως το `logging` στο Python ή το` log4j` σε Java) περιλαμβάνουν αυτόματα πληροφορίες αρχείων και γραμμών στα μηνύματα καταγραφής τους. Αυτή είναι μια καλή προσέγγιση για την παρακολούθηση των σφαλμάτων κατά την εκτέλεση του προγράμματος, ακόμη και αν δεν χειρίζεστε ρητά εξαιρέσεις σε κάθε πιθανό σημείο σφάλματος.
4. Εντοπιστές:
Οι εντοπιστές σφαλμάτων (όπως το GDB για C/C ++, PDB για Python) είναι ανεκτίμητα για την εξεύρεση σφαλμάτων. Παρέχουν λεπτομερείς πληροφορίες σχετικά με την κατάσταση εκτέλεσης στο σημείο αποτυχίας, συμπεριλαμβανομένου του ονόματος αρχείου και του αριθμού γραμμής.
Σημαντικές εκτιμήσεις:
* Κατασκευές εντοπισμού σφαλμάτων: Για πολλές γλώσσες, απαιτούνται επιλογές μεταγλωττιστή για να επιτρέψουν πληροφορίες εντοπισμού σφαλμάτων (π.χ. σημαία `-g` στο GCC). Αυτές οι πληροφορίες είναι ζωτικής σημασίας για τα ίχνη στοίβας και τη λειτουργικότητα του εντοπισμού σφαλμάτων. Η απελευθέρωση δημιουργεί συχνά απογυμνώνει αυτές τις πληροφορίες εντοπισμού σφαλμάτων για να μειώσει το εκτελέσιμο μέγεθος.
* Στρατηγική χειρισμού σφαλμάτων: Αποφασίστε αν θα χειριστείτε τα σφάλματα τοπικά (χρησιμοποιώντας `δοκιμάστε ... εκτός '/` δοκιμάστε ... catch`) ή κεντρικά (χρησιμοποιώντας καταγραφή). Μια υβριδική προσέγγιση είναι συχνά καλύτερη.
* Σαφήνεια: Αποφύγετε τα γενικά μηνύματα σφάλματος. Παρέχετε το πλαίσιο όποτε είναι δυνατόν (π.χ. "Αρχείο ανάγνωσης σφαλμάτων" Data.txt "").
Θυμηθείτε να επιλέξετε τη μέθοδο που ταιριάζει καλύτερα στη γλώσσα σας, την πολυπλοκότητα της εφαρμογής σας και τη στρατηγική χειρισμού σφαλμάτων. Ο χειρισμός εξαίρεσης που συνδυάζεται με ένα σύστημα καταγραφής προσφέρει συνήθως μια ισχυρή λύση.
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα