λογισμικό

Γνώση Υπολογιστών >> λογισμικό >  >> Ανοικτού κώδικα

Πώς μπορεί να γίνει ένα πρόγραμμα για την εκτύπωση του ονόματος του αρχείου προέλευσης όπου εμφανίζεται ένα σφάλμα;

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

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 "").

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

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα