Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Υπολογιστών Γλώσσες

Πώς να ανιχνεύσει υπερχείλιση στοίβας

γλώσσες προγραμματισμού ηλεκτρονικών υπολογιστών βασίζονται σε μια δομή δεδομένων στοίβας κλήσεων --- μερικοί κάνουν την παρουσία της ρητά στον προγραμματιστή , ενώ όλα βασίζονται σε μια στοίβα για το πρόγραμμα άλματα που πρέπει να επιστρέψουν στον τόπο όπου το αρχικό πρόγραμμα σταμάτησε μετά έχοντας εκτελέσει κάποιο είδος της υπορουτίνας . Πριν από τη μεταφορά του ελέγχου στον κωδικό χρήστη , το πρόγραμμα καθορίζει το μέγιστο μέγεθος για την στοίβα κλήσεων , μεταξύ άλλων παρασκευασμάτων . Μερικές φορές ένα πρόγραμμα ματαιώνει εξαιτίας ενός σφάλματος κατάτμησης , η οποία μπορεί να προκληθεί από μία ποικιλία παραγόντων . Μπορείτε εύκολα να ανιχνεύσει είναι μια υπερχείλιση στοίβας είναι στη ρίζα του προβλήματος , χρησιμοποιώντας ένα πρόγραμμα εντοπισμού σφαλμάτων . Τα πράγματα που θα χρειαστείτε
Ο πηγαίος κώδικας για το πρόγραμμα
Compiler για το πρόγραμμα
Πηγή επίπεδο εντοπισμού σφαλμάτων με την υποστήριξη για την εμφάνιση ένα backtrace
Η Εμφάνιση Περισσότερες οδηγίες
Η 1

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

" g+ + - g -o program.c πρόγραμμα«

όπου η επιλογή " - g " εντολή στον μεταγλωττιστή να περιλαμβάνει σύμβολα εντοπισμού σφαλμάτων . 2

Εκτελέστε το πρόγραμμα έως ότου σταματήσει λόγω βλάβης του κατακερματισμού . Για παράδειγμα , εκτελέστε:

" πρόγραμμα "
εικόνων 3

Επικαλεστείτε το πρόγραμμα εντοπισμού σφαλμάτων για το πρόγραμμα αμέσως μετά το σφάλμα κατάτμησης . Για παράδειγμα , εκτελέστε:

" πρόγραμμα gdb "
Η 4

Εμφάνιση ενός backtrace χρησιμοποιώντας το πρόγραμμα εντοπισμού σφαλμάτων . Όλα τα προγράμματα εντοπισμού σφαλμάτων πηγή επίπεδο έχουν τη δυνατότητα να εμφανίζει την αλυσίδα των ένθετων επικλήσεις λειτουργία κατά τη στιγμή της συντριβής του προγράμματος . Για μας " gdb " παράδειγμα , να εισέλθουν στο εσωτερικό " gdb : "

" backtrace "
5

Εξετάστε το backtrace για σημάδια άπειρη αναδρομή . Είναι ένα ενιαίο όνομα της συνάρτησης επαναλαμβάνεται περισσότερες φορές από ό, τι είναι αναγκαίο, πριν από τη συντριβή; Υπάρχουν μερικές λειτουργίες καλώντας ο ένας τον άλλο ( για παράδειγμα , η αμοιβαία αναδρομή) πάρα πολλές φορές πριν από τη συντριβή ; Εάν η απάντηση σε κάθε ερώτηση είναι «ναι », το πρόγραμμα σταμάτησε λόγω της υπερχείλισης στοίβας . Η πιο πιθανή αιτία της υπερχείλισης στοίβας σε γλώσσες υψηλού επιπέδου είναι σωστά κωδικοποιημένα περιπτώσεις βάσης .
Η
εικόνων

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

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