Ένα stack trace (ή traceback) είναι μια έξοδος που δείχνει τη στοίβα μεθόδων της εφαρμογής σας. Συνήθως θα δείτε ένα στο τερματικό σας όταν η εφαρμογή σας αντιμετωπίσει σφάλμα.

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

Ένα ίχνος στοίβας μπορεί να είναι πολύ χρήσιμο όταν διορθώνετε τον κωδικό σας.

Γιατί είναι σημαντικό το Stack Trace;

Το stack trace είναι ένα σημαντικό εργαλείο εντοπισμού σφαλμάτων. Σας δίνει λεπτομερείς πληροφορίες όπως τον τύπο του σφάλματος, τη μέθοδο με την οποία προέκυψε, τη γραμμή στον κώδικά σας όπου συνέβη και τη διαδρομή του αρχείου.

Για έναν έμπειρο προγραμματιστή, αυτές οι πληροφορίες είναι ένα χρυσωρυχείο για την κατανόηση του τι ακριβώς πήγε στραβά και πού.

Ως προγραμματιστής, μπορείτε επίσης να ζητήσετε από το πρόγραμμά σας να δημιουργήσει ένα ίχνος στοίβας κατά παραγγελία. Αυτό μπορεί να είναι ιδιαίτερα χρήσιμο για τη συντήρηση κώδικα και την αντιμετώπιση προβλημάτων.

instagram viewer

Πώς να εξάγετε ένα ίχνος στοίβας

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

Μπορείτε να δημιουργήσετε ένα ίχνος στοίβας χωρίς να έχετε σφάλματα στον κώδικά σας. Για να το κάνετε αυτό, απλώς χρησιμοποιήστε το DumpStack μέθοδος του java.lang. Νήμα τάξη. Θα εμφανίσει όλες τις μεθόδους που έχουν κληθεί, απευθείας από αυτήν που καλεί το dumpStack. Η μέθοδος κλήσης θα είναι αυτή που βρίσκεται πάνω από το δομή δεδομένων στοίβας.

Ακολουθεί ένα παράδειγμα προγράμματος που δημιουργεί ρητά ένα ίχνος στοίβας:

τάξηStackTraceDemo{
δημόσιοστατικόςκενόςκύριος(String[] args){
ημέρα();
}

στατικόςκενόςημέρα(){
ώρες();
}

στατικόςκενόςώρες(){
λεπτά();
}

στατικόςκενόςλεπτά(){
ενθ α = 24 * 60;
System.out.println (a + " λεπτά σε μια μέρα");
Νήμα.dumpStack();
}
}

Παραγωγή:

1440 λεπτά την ημέρα
Ιάβα.lang.Εξαίρεση: Σωρόςίχνος
στο java.base/java.lang. Thread.dumpStack (Thread.java: 138)
στοStackTraceDemo.λεπτά(StackTraceDemo.Ιάβα:17)
στοStackTraceDemo.ώρες(StackTraceDemo.Ιάβα:11)
στοStackTraceDemo.ημέρα(StackTraceDemo.Ιάβα:7)
στοStackTraceDemo.κύριος(StackTraceDemo.Ιάβα:3)

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

Beyond the Stack Trace

Από προεπιλογή, όταν το πρόγραμμα Java σας εμφανίσει σφάλμα, θα σταματήσει και θα εμφανίσει ένα ίχνος στοίβας. Ωστόσο, μπορείτε να επιλέξετε να χειριστείτε αυτά τα σφάλματα με χάρη, αντί να εμφανίζετε μηνύματα που μπορεί να μπερδέψουν τους τελικούς χρήστες.

Μπορείτε να βελτιώσετε τον χειρισμό σφαλμάτων του προγράμματός σας χρησιμοποιώντας ένα μπλοκ try...catch() για να καταγράψετε εξαιρέσεις. Είναι επίσης σημαντικό να λάβετε υπόψη —και να κατανοήσετε— τους διάφορους τύπους σφαλμάτων που μπορεί να αντιμετωπίσουν τα προγράμματά σας.