Τρόπος χρήσης Pageheap.exe στα Windows XP, Windows 2000 και Windows Server 2003

Σύνοψη

Αυτό το άρθρο περιγράφει τον τρόπο χρήσης του εργαλείου σωρού σελίδας (Pageheap.exe) στο Microsoft Windows XP, τα Windows 2000 και Microsoft Windows Server 2003.

Περισσότερες πληροφορίες

Pageheap.exe ορίζει σημαίες σωρού σελίδα, τα οποία θα σας βοηθήσουν να βρείτε την καταστροφή του σωρού. Μπορεί επίσης να βοηθήσει να ανιχνεύουν "διαρροές" στα προγράμματα που εκτελούνται σε Windows 2000 Professional Service Pack 2 (SP2) και τα συστήματα των Windows XP Professional.

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

Σημαντικό Pageheap.exe δεν καθορίζει ποιο είναι το σφάλμα, αλλά αυτό θα διακοπεί η λειτουργία του συστήματος όταν αντιμετώπισε ένα πρόβλημα. Επιτρέπει σε ένα επίπεδο επαλήθευσης που ήδη υπάρχει στις βιβλιοθήκες Ntdll.dll συστήματος στα Windows 2000 Professional SP2 και Windows XP Professional. Pageheap.exe δεν θα λειτουργούν σε παλαιότερες εκδόσεις των Microsoft Windows.

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

Έννοιες

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

Δύο έννοιες είναι κεντρικές για την κατανόηση των εντολών που σχετίζονται με Pageheap.exe και τον τρόπο χρήσης του:
  • Καταστροφών σε μπλοκ του heap εντοπίζονται, είτε τοποθετώντας μια μη προσβάσιμη σελίδα στο τέλος της εκχώρησης ή ελέγχοντας τα μοτίβα γεμίσματος όταν απελευθερωθεί το μπλοκ.
  • Υπάρχουν δύο σωρών (σωρού πλήρους σελίδας και κανονική σελίδα σωρού) για κάθε σωρού που δημιουργήθηκαν μέσα σε μια διαδικασία που έχει σωρού σελίδας που είναι ενεργοποιημένη.
    • Σωρού πλήρους σελίδας αποκαλύπτει καταστροφών σε μπλοκ του heap, τοποθετώντας μια μη προσβάσιμη σελίδα στο τέλος της εκχώρησης. Το πλεονέκτημα αυτής της προσέγγισης είναι ότι μπορείτε να επιτύχετε "αιφνίδιου θανάτου," που σημαίνει ότι θα αποκτήσει πρόσβαση η διαδικασία παραβιάζουν (AV) ακριβώς στο σημείο αποτυχίας. Αυτή η συμπεριφορά εύκολα αποτυχίες εντοπισμού σφαλμάτων. Το μειονέκτημα είναι ότι κάθε εκχώρηση χρησιμοποιεί τουλάχιστον μία σελίδα δεσμευμένης μνήμης. Για μια διεργασία μεγάλες απαιτήσεις μνήμης, οι πόροι του συστήματος μπορεί να είναι γρήγορα εξαντληθεί.
    • Κανονική σελίδα σωρού μπορεί να χρησιμοποιηθεί σε περιπτώσεις όπου τους περιορισμούς μνήμης αχρηστεύσει σωρού πλήρους σελίδας. Ελέγχει τα μοτίβα γεμίσματος όταν απελευθερωθεί ένα μπλοκ του heap. Το πλεονέκτημα αυτής της μεθόδου είναι ότι μειώνει δραστικά η κατανάλωση μνήμης. Το μειονέκτημα είναι ότι καταστροφών θα ανιχνεύονται μόνο όταν απελευθερωθεί το μπλοκ. Αυτό καθιστά πιο δύσκολο για τον εντοπισμό σφαλμάτων αποτυχίες.

Θέση για το εργαλείο Pageheap λήψης

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

Επιλέξτε την πιο πρόσφατη έκδοση των εργαλείων εντοπισμού σφαλμάτων. Όταν εγκαθιστάτε τα εργαλεία, επιλέξτε το
Προσαρμοσμένη εγκατάσταση και, στη συνέχεια, εγκαταστήστε ένα κατάλογο με ένα κατάλληλο όνομα. Για παράδειγμα, εγκαταστήστε τα εργαλεία για να C:\Debug ή να C:\Debugtools.

Επιλογή μεθόδου για να εξετάσετε τις καταστροφές του Heap μπλοκ

Οι περισσότερες από τις καταστροφών σε μπλοκ σωρού να μπορεί να εντοπίσει με έναν από δύο τρόπους:
  • Σωρού πλήρους σελίδας: τοποθετήστε μια μη προσβάσιμη σελίδα στο τέλος της εκχώρησης.
  • Κανονική σελίδα σωρού: μοτίβα γεμίσματος ελέγχου όταν λαμβάνει αποδεσμευτεί το μπλοκ.

Σωρού πλήρους σελίδας

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

Το πλεονέκτημα της πλήρους σελίδας σωρού είναι ότι προκαλεί μια διαδικασία να πρόσβαση παραβιάζουν (AV) ακριβώς στο σημείο αποτυχίας. Αυτό διευκολύνει την αποτυχία εντοπισμού σφαλμάτων. Για να μπορέσετε να εντοπίσετε αποτυχίες, χρησιμοποιήστε πρώτα σωρού κανονική σελίδα για να καθορίσετε την περιοχή όπου έχει αποτύχει μια διαδικασία και στη συνέχεια χρησιμοποιήστε σωρού πλήρους σελίδας σε μεμονωμένες διαδικασίες μεγάλης κλίμακας για αυτήν την κλάση περιορισμένα αναθέσεων (δηλαδή, ένα συγκεκριμένο μέγεθος περιοχής ή μια συγκεκριμένη βιβλιοθήκη).

Κανονική σελίδα σωρού

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

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

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

Χρήση GFlags με σωρού σελίδας σε όλο το σύστημα

Του εργαλείου GFlags χρησιμοποιείται για να ενεργοποιήσει σωρού σελίδας σε όλο το σύστημα. Προκειμένου μια εντολή GFlags για να τεθούν σε ισχύ, πρέπει να επανεκκινήσετε τον υπολογιστή σας μετά την έκδοση της εντολής.

Για να ενεργοποιήσετε σωρού κανονικής σελίδας σε όλο το σύστημα:
  1. Πληκτρολογήστε τα ακόλουθα στη γραμμή εντολών:gflags - r + hpa

  2. Επανεκκινήστε τον υπολογιστή σας.
Για να απενεργοποιήσετε σωρού κανονικής σελίδας σε όλο το σύστημα:
  1. Πληκτρολογήστε τα ακόλουθα στη γραμμή εντολών:gflags - r-hpa

  2. Επανεκκινήστε τον υπολογιστή σας.
Σημείωση Άλλες παράμετροι GFlags είναι χρήσιμες όταν ενεργοποιείτε τη σελίδα σωρού. Εάν είναι ενεργοποιημένες οι άλλες ρυθμίσεις που φαίνεται να σχετίζονται με τη μνήμη heap, μπορεί να εισαχθεί σελίδα σφαλμάτων σωρού λόγω διενέξεων μεταξύ της διαχείρισης σωρού σελίδας και αυτές οι σημαίες σωρού "αβλαβές".

Χρήση GFlags με ένα σωρό σελίδα μία διεργασία

Μπορείτε να ενεργοποιήσετε το heap της σελίδας για να εποπτεύσετε μία συγκεκριμένη διαδικασία. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα:
  1. Σε μια γραμμή εντολών, αλλάξτε τον κατάλογο όπου εγκαταστήσατε τα εργαλεία εντοπισμού σφαλμάτων.
  2. Στη γραμμή εντολών, πληκτρολογήστε τα ακόλουθα και, στη συνέχεια, πιέστε το πλήκτρο ENTER:
    Gflags.exe /p /enable
    lsass.exe
    Σημείωση Lsass.exe συμβολίζει το όνομα της διεργασίας που θέλετε να παρακολουθήσετε με το εργαλείο Pageheap.
  3. Όταν δεν χρειάζεται πλέον σωρού σελίδας παρακολούθησης, θα πρέπει να απενεργοποιήσετε την παρακολούθηση. Για να γίνει αυτό, πληκτρολογήστε τα ακόλουθα σε μια γραμμή εντολών και, στη συνέχεια, πιέστε το πλήκτρο ENTER:
    Gflags.exe /p /disable lsass.exe
    Σημείωση Lsass.exe συμβολίζει το όνομα της διεργασίας που θέλετε να παρακολουθήσετε με το εργαλείο Pageheap.
  4. Για να δημιουργήσετε μια λίστα με όλα τα προγράμματα που έχουν αυτήν τη στιγμή ενεργοποιημένη η επαλήθευση Pageheap, πληκτρολογήστε τα ακόλουθα σε μια γραμμή εντολών και, στη συνέχεια, πιέστε το πλήκτρο ENTER:
    Gflags.exe /p

Εκχωρήσεις μη στοιχισμένη

Οι διαχειριστές heap των Windows (όλες οι εκδόσεις) έχουν πάντα να εξασφαλίσει ότι η εκχώρηση σωρού έχει μια διεύθυνση έναρξης που είναι 8-byte με στοίχιση (σε πλατφόρμες 64-bit της στοίχισης είναι 16-byte). Η διαχείριση σωρού σελίδας κάνει τα ίδια εχέγγυα. Αυτό είναι αδύνατο, ωστόσο, εάν θέλετε να έχετε το τέλος του-ο-κατανομής ακριβώς στο τέλος της σελίδας. Την ακριβή χορήγηση Τέλος σελίδας είναι απαραίτητη ώστε το σφάλμα off-προς-ένα-byte θα ενεργοποιούν μια ανάγνωση ή εγγραφή σε αυτήν τη σελίδα μη προσπελάσιμες και έχει ως αποτέλεσμα ένα σφάλμα αμέσως.

Εάν το μέγεθος που ζητήθηκε από το χρήστη για το μπλοκ είναι 8-byte με στοίχιση, στη συνέχεια, σελίδα σωρού δεν πληρούν "Έναρξη διεύθυνση 8-byte με στοίχιση" και τους περιορισμούς "Τέλος διεύθυνση σελίδας στοίχισης". Η λύση είναι να πληροί ο πρώτος περιορισμός και την έναρξη του μπλοκ 8-byte με στοίχιση. Στη συνέχεια, χρησιμοποιήστε ένα μοτίβο γεμίσματος μικρό ανάμεσα στο τέλος του μπλοκ και την αρχή της μη προσπελάσιμες σελίδας. Αυτό το μοτίβο γεμίσματος μπορεί να είναι από 0 byte μέσω 7 byte σε μήκος στην αρχιτεκτονική 32-bit. Το μοτίβο γεμίσματος ελέγχεται κατά την ελεύθερη.

Εάν η ανίχνευση βλαβών άμεση είναι απαραίτητες για αυτές τις εκχωρήσεις που διαφορετικά θα έχει ένα μοτίβο γεμίσματος στο τέλος, κάντε τη σελίδα διαχείρισης σωρού Παράβλεψη του κανόνα στοίχιση 8 byte και στοίχιση πάντα το τέλος της εκχώρησης αποτελεί όριο σελίδας, χρησιμοποιώντας τις παραμέτρους / μη στοιχισμένη και πλήρους . Για περισσότερες πληροφορίες, δείτε την παράμετρο / μη στοιχισμένη .

ΣΗΜΕΊΩΣΗ: ορισμένα προγράμματα να υποθέσεις σχετικά με στοίχιση 8 byte και αυτές παύουν να λειτουργούν σωστά με την παράμετρο / μη στοιχισμένη . Ο Microsoft Internet Explorer είναι ένα τέτοιο πρόγραμμα.

Μη ολοκληρωμένες σελίδες για εκχωρήσεις Heap πλήρους σελίδας

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

Τέλος του buffer υπερβάσεις μπορούν να εντοπιστούν χρησιμοποιώντας μια ζώνη δεσμευμένο εικονικού χώρου, αντί για μια σελίδα μη προσπελάσιμες δεσμευτεί. Μια εξαίρεση παραβίαση πρόσβασης παρουσιάζεται όταν η διαδικασία αγγίζει το δεσμευμένο χώρο εικονικών. Αυτή η προσέγγιση μπορεί να μειώσει την κατανάλωση μνήμης κατά έως 50 τοις εκατό. Για περισσότερες πληροφορίες, δείτε την παράμετρο / αποδέσμευσή .

Πιθανότητα παρεμβολής

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

Καθορίστε έναν αριθμό από 1 έως 10.000 να αντιπροσωπεύει την πιθανότητα ότι μια ανάθεση θα αποτύχει. Χρησιμοποιώντας μια πιθανότητα 10.000 εξασφαλίζει ότι θα αποτύχει το 100 τοις εκατό των αναθέσεων. Πιθανότητα 2.000 Καθορίζει ότι περίπου το 20 τοις εκατό των αναθέσεων θα αποτύχει.

Η διαχείριση σωρού σελίδας απαιτείται ιδιαίτερη προσοχή για να αποφύγετε την πιθανότητα παρεμβολής στα δύο πρώτα 5 δευτερόλεπτα της ζωής της διαδικασίας, καθώς και τις διαδρομές κώδικα φόρτωσης των Windows NT (για exampole, η φόρτωση βιβλιοθήκης, FreeLibrary). Εάν δεν είναι επαρκής ώστε να επιτρέπει τη διαδικασία για την ολοκλήρωση της εκκίνησης 5 δευτερόλεπτα, μπορείτε να καθορίσετε ένα μεγαλύτερο χρονικό όριο στην αρχή της διαδικασίας. Για περισσότερες πληροφορίες, δείτε την παράμετρο /fault .

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

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

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

! heap -p -f [ΑΡΙΘΜΌΣ ΊΧΝΗ]

Από προεπιλογή, η επέκταση θα εμφανίζονται μόνο τα τελευταία τέσσερα ίχνη.

Αυτόματα να επισυνάψετε ένα πρόγραμμα εντοπισμού σφαλμάτων κατά την εκκίνηση της εφαρμογής

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

Pageheap.exe είναι αποτελεσματικά όταν χρησιμοποιούνται για την επαλήθευση οποιαδήποτε διαδικασία εκχώρησης μνήμης, συμπεριλαμβανομένων εκχωρήσεις στυλ C++ νέα και διαγραφής, με την προϋπόθεση ότι οι λειτουργίες προσαρμοσμένων εκχώρησης/δωρεάν κλήση τελικά σε NT σωρού διασυνδέσεις διαχείρισης (δηλαδή, RtlAllocateHeap, RtlFreeHeap). Για να γίνει αυτό, εξασφαλίζονται τις ακόλουθες λειτουργίες:
  • Λειτουργεί όπως HeapAlloc, HeapFree, HeapReAlloc: οι λειτουργίες αυτές εξάγονται από το kernel32.dll και κλήση απευθείας σε NT heap διασυνδέσεις. Λειτουργεί όπως GlobalAlloc, GlobalFree, GlobalReAlloc: οι λειτουργίες αυτές εξάγονται από το kernel32.dll και καλούν άμεσα ή έμμεσα οι διασυνδέσεις σωρού NT.
  • Λειτουργεί όπως LocalAlloc, τη LocalFree, LocalReAlloc: οι λειτουργίες αυτές εξάγονται από το kernel32.dll και καλούν άμεσα ή έμμεσα οι διασυνδέσεις σωρού NT.
  • Λειτουργεί μέσω της malloc, δωρεάν, realloc, msize, αναπτύξτε το στοιχείο: οι συναρτήσεις αυτές εξάγονται από msvcrt.dll και καλούν άμεσα ή έμμεσα σωρού NT. Αυτό δεν έχει πάντα την υπόθεση. Χρόνου εκτέλεσης C που χρησιμοποιείται για να έχετε μια εφαρμογή διαφορετικών σωρού, αλλά η τρέχουσα C χρόνου εκτέλεσης καλεί απευθείας σε σωρού NT.
  • Τελεστές νέα, Διαγραφή, νέα [] , Διαγραφή [] : οι συναρτήσεις αυτές εξάγονται από msvcrt.dll και καλούν άμεσα ή έμμεσα σωρού NT.
Οποιεσδήποτε άλλες εκχώρησης/ελεύθερο σύνολο λειτουργιών πιθανώς είναι ένα προσαρμοσμένο σχήμα και δεν είναι βέβαιο ότι καλούν άμεσα ή έμμεσα σωρού NT. Μόνο προέλευσης κώδικα επιθεώρησης ή που εκτελείται σε πρόγραμμα εντοπισμού σφαλμάτων μπορεί να αποκαλύψει την πραγματική εφαρμογή.

Αποφύγετε τη χρήση στατική σύνδεση. Ορισμένες εφαρμογές έχουν στατικά συνδεδεμένο με παλιές εκδόσεις του χρόνου εκτέλεσης C. Αυτές οι παλαιότερες εκδόσεις δεν καλέσετε heap των Windows NT APIs και Pageheap.exe δεν μπορεί να χρησιμοποιηθεί για να επαληθεύσετε αυτές τις εκχωρήσεις. Δυναμική σύνδεση διασφαλίζει ότι λαμβάνετε τις πιο πρόσφατες βιβλιοθήκη χρόνου εκτέλεσης C (msvcrt.dll).

Κλάσεις σφαλμάτων που εντοπίστηκαν από Pageheap.exe

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

Ένα από τα πλεονεκτήματα της Pageheap.exe είναι ότι εντοπίζονται πολλά σφάλματα, όταν αυτά να συμβούν. Για παράδειγμα, ένα σφάλμα off-προς-ένα-byte στο τέλος του buffer που έχει εκχωρηθεί δυναμικά ενδέχεται να προκαλέσει παραβίαση πρόσβασης άμεσα. Υπάρχουν μερικά τύποι σφαλμάτων που δεν είναι δυνατό να εντοπιστεί, όταν προκύπτουν. Στις περιπτώσεις αυτές, η αναφορά σφάλματος καθυστερεί μέχρι να αποδεσμευτεί το μπλοκ.
  • Δείκτης σωρού δεν είναι έγκυρη: διασυνδέσεις επιπέδου σωρού όλα Win32 και Windows NT λαμβάνουν ως πρώτη παράμετρο ένα δείκτη προς τη μνήμη heap όπου η λειτουργία πρέπει να συμβεί. Η διαχείριση σωρού σελίδας εντοπίζει ένα δείκτη δεν είναι έγκυρη σωρού κατά τη στιγμή που γίνεται η κλήση.
  • Δείκτης μπλοκ σωρού δεν είναι έγκυρη: αφού έχει εκχωρηθεί ένα μπλοκ, μπορεί να χρησιμοποιηθεί ως παράμετρος για αρκετά heap διασυνδέσεις, ιδίως την κλάση free() των διασυνδέσεων. Η διαχείριση σωρού σελίδας εντοπίζει αμέσως ένα δείκτη μπλοκ σωρού δεν είναι έγκυρη. Ανατρέξτε στην ενότητα Εντοπισμός σφαλμάτων σελίδας σωρού αποτυχίες ένας τρόπος για να διαπιστώσετε εάν είναι λίγα τα byte από τη διεύθυνση δεν είναι έγκυρη ή είναι εντελώς εσφαλμένα.
  • Πολυνηματική μη συγχρονισμένη πρόσβαση στο heap: κάποιες εφαρμογές καλούν μια σωρού από πολλά νήματα. Αυτός ο τύπος σεναρίου απαιτεί ρύθμιση σημαίας που θα αποτελέσουν το έναυσμα απόκτησης ενός κλειδώματος σωρού (από το χρήστη). Η διαχείριση σωρού σελίδας θα εντοπίσει αυτόν τον τύπο της παραβίασης, όταν δύο νήματα προσπαθούν να καλούν ταυτόχρονα το heap.
  • Υποθέσεις για την εκ νέου ανάθεση ενός μπλοκ στην ίδια διεύθυνση: μια λειτουργία απαιτείται εκ νέου ανάθεση δεν είναι εγγυημένη για να επιστρέψει την ίδια διεύθυνση. Αυτό ισχύει ιδιαίτερα κατά την εκ νέου ανάθεση μειώνει το μέγεθος του μπλοκ. Ορισμένες εφαρμογές προϋποθέτουν ότι απαιτείται εκ νέου ανάθεση θα επιστρέψει την ίδια διεύθυνση. Η διαχείριση σωρού σελίδας πάντα εκχωρεί ένα νέο μπλοκ κατά τη διάρκεια της ανακατανομής και ελευθερώνει το παλιό μπλοκ. Το ελεύθερο μπλοκ προστατεύεται για πρόσβαση ανάγνωσης/εγγραφής και επομένως οποιαδήποτε πρόσβαση σε αυτό θα αυξήσει μια παραβίαση πρόσβασης.
  • Διπλή δωρεάν: αυτό το σφάλμα, όπου τα ίδια μπλοκ σωρού απελευθερώνονται αρκετές φορές, είναι συνηθισμένο σε ορισμένες εφαρμογές. Αυτό έχει εντοπιστεί αμέσως από τη Διαχείριση σωρού σελίδας επειδή, στο δεύτερο σφάλματα, το μπλοκ θα δεν έχουν το σωστό πρόθεμα κεφαλίδας και δεν είναι δυνατή η εύρεση αυτών των μπλοκ που έχει εκχωρηθεί. Ανατρέξτε στην ενότητα Εντοπισμός σφαλμάτων σελίδας σωρού αποτυχίες για τρόπους για να αναλύσετε το ίχνος στοίβας της πρώτης εργασίας δωρεάν. Αυτό το σφάλμα μπορεί να είναι μια παραλλαγή του προβλήματος απαιτείται εκ νέου ανάθεση, επειδή, όταν η εφαρμογή σας απαλλάσσει τι κρίνει αυτή είναι η διεύθυνση του μπλοκ, το μπλοκ έχει ήδη αποδεσμευτεί ως μέρος της την εκ νέου ανάθεση.
  • Πρόσβαση μπλοκ αφού ελευθερώσετε: Παραλληλόγραμμα αποδεσμευμένη μνήμη διατηρούνται για ένα μικρό χρονικό διάστημα από τη Διαχείριση σωρού σελίδας σε ένα χώρο συγκέντρωσης προστατευμένης μνήμης. Κανένα δικαίωμα πρόσβασης σε αυτά τα τμήματα θα ενεργοποιεί μια παραβίαση πρόσβασης. Βάσει της αρχής "τοποθεσία", θα πρέπει να αλιεύονται περισσότερα προβλήματα αν στον ελεύθερο χώρο συγκέντρωσης προστατευμένο είναι αρκετά μεγάλη. Εάν το μπλοκ ελευθερώνονται είναι ακόμη σε του προστατευμένου χώρου συγκέντρωσης, το σφάλμα εντοπίζεται αμέσως. Ωστόσο, εάν η μνήμη επαναχρησιμοποιήθηκε, είναι λιγότερες πιθανότητες Εύρεση το σφάλμα ή προσδιορίζει τον κωδικό που την προκάλεσε.
  • Η Access μετά το τέλος της επιμερίζεται μπλοκ: Η Διαχείριση σωρού σελίδας τοποθετεί μια πρόσβαση σε σελίδα που ακολουθεί αμέσως μετά το μπλοκ που έχει εκχωρηθεί. Οποιαδήποτε πρόσβαση πέρα από το τέλος του μπλοκ θα ενεργοποιεί μια παραβίαση πρόσβασης. Ορισμένες εφαρμογές αναμένουν εκχωρήσεις να είναι στοιχισμένο 8-byte. Αυτή η δυνατότητα έχει υποστηρίζονται από Windows NT 3.5 διαχειρίσεις σωρού. Ένα μέγεθος αίτησης που δεν είναι 8-byte με στοίχιση θα εξακολουθείτε να λαμβάνετε μια διεύθυνση με στοίχιση 8 byte, αλλά αυτό αφήνει λίγα bytes μετά το τέλος του μπλοκ που είναι ακόμη προσβάσιμα. Εάν η εφαρμογή καταστρέψει μόνο αυτές τις λίγες byte, το σφάλμα θα αλιεύονται μόνο, ελέγχοντας το μοτίβο επίθημα μπλοκ, όταν απελευθερωθεί το μπλοκ.
  • Η Access πριν από την έναρξη της επιμερίζεται μπλοκ: δυνατό να λάβει οδηγίες της διαχείρισης σωρού σελίδας με μια σημαία μπορεί να οριστεί για να τοποθετήσετε τη σελίδα πρόσβαση στην αρχή του μπλοκ, και όχι στο τέλος. Οποιαδήποτε πρόσβαση πριν από την έναρξη του μπλοκ θα αυξήσει την παραβίαση πρόσβασης.
ΑποτυχίαΚανονική σελίδα σωρούΣωρού πλήρους σελίδας
Δείκτης σωρού δεν είναι έγκυρηΑλιεύονται αμέσωςΑλιεύονται αμέσως
Δείκτης μπλοκ σωρού δεν είναι έγκυρηΑλιεύονται αμέσωςΑλιεύονται αμέσως
Μη συγχρονισμένη πρόσβασηΑλιεύονται αμέσωςΑλιεύονται αμέσως
Υπόθεση σχετικά με τη διεύθυνση εκ νέου ανάθεση90% έως ότου η πραγματική δωρεάναλιεύονται αμέσως το 90%
Ελευθερώστε διπλάαλιεύονται αμέσως το 90%αλιεύονται αμέσως το 90%
Επαναχρησιμοποίηση αφού ελευθερώσετε90% έως ότου η πραγματική δωρεάναλιεύονται αμέσως το 90%
Η Access μετά το τέλος του μπλοκΑλιεύονται κατά την ελεύθερηΑλιεύονται αμέσως
Η Access πριν από την έναρξη του μπλοκΑλιεύονται κατά την ελεύθερηΑλιεύονται αμέσως (ειδική σημαία)

Εντοπισμός σφαλμάτων σελίδας σωρού αποτυχίες

Για περισσότερες πληροφορίες σχετικά με τον εντοπισμό σφαλμάτων σελίδας σωρού αποτυχίες, ανατρέξτε στην Αναφορά Tookit συμβατότητας εφαρμογής διαθέσιμη μέσα από το Application Compatibility Toolkit.

Για τη σύνταξη του Pageheap.exe και παραδείγματα χρήσης Pageheap.exe, ανατρέξτε στην Αναφορά Tookit συμβατότητας εφαρμογής διαθέσιμη μέσα από το Application Compatibility Toolkit.

Για περισσότερες πληροφορίες, ανατρέξτε στο ακόλουθο άρθρο της Γνωσιακής Βάσης της Microsoft:
294895 Τρόπος λήψης του Κιτ εργαλείων συμβατότητας εφαρμογών των Windows

Ιδιότητες

Αναγνωριστικό άρθρου: 286470 - Τελευταία αναθεώρηση: 23 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια