Umdhtools.exe: Τρόπος χρήσης του Umdh.exe για την εύρεση διαρροών μνήμης

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 268343 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Το βοηθητικό πρόγραμμα λειτουργίας χρήστη απόρριψης σωρού (UMDH) που λειτουργεί με το λειτουργικό σύστημα για να αναλύσετε στις εκχωρήσεις heap των Windows για μια συγκεκριμένη διαδικασία. Αυτό το βοηθητικό πρόγραμμα, καθώς και τα άλλα εργαλεία που συσχετίζονται με αυτήν, προορίζονται κυρίως για για τα Windows 2000 και Windows XP. Κάντε κλικ στο κουμπί " αναπαραγωγή " για να προβάλετε αυτήν την επίδειξη πολυμέσων ροής.

ΣημείωσηΤο βίντεο κωδικοποιείται με τον κωδικοποιητή ACELP ®, θα χρειαστεί εγκαταστήσετε δωρεάν κωδικοποιητή ACELP ® διαθέσιμες στη http://www.ACELP.NET/acelp_eval.PHP



Σημείωση Επειδή η συνάρτηση μέσω της malloc στη λειτουργική μονάδα C χρόνου εκτέλεσης (CRT) χρησιμοποιεί την παράλειψη δείκτη πλαισίου (FPO) σχετικά με την αρχική έκδοση του Windows Server 2003, που δεν μπορεί να δείτε τις πληροφορίες πλήρη στοίβα της συνάρτησης μέσω της malloc , χρησιμοποιώντας το εργαλείο UMDH. Αυτό το ζήτημα διορθωθεί στη λειτουργική μονάδα CRT του Windows Server 2003 Service Pack 1 (SP1). Επομένως, μπορείτε να δείτε τις πληροφορίες πλήρη στοίβα της συνάρτησης μέσω της malloc στον Windows Server 2003 SP1.

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

Πριν από τη χρήση UMDH

Εάν πιστεύετε ότι αντιμετωπίζετε μια διαρροή μνήμης, να έχετε υπόψη σας ότι η μνήμη διαρροών ενδέχεται να μην είναι να εμφανίζονται ως. Μπορεί να ανακαλύψετε ότι ένα "διαρροή" μνήμης δεν είναι μια διαρροή μνήμης ισχύει, αλλά είναι μια βελτίωση επιδόσεων. Για το παράδειγμα, ο μηχανισμός διαχείρισης βάσεων δεδομένων Microsoft Jet μπορεί να καταναλώνουν μεγάλες ποσότητες μνήμης (μέχρι 128 MB σε έναν υπολογιστή 256 MB) επειδή ανακτά δεδομένα και γράφει αποθηκεύει προσωρινά. Η μνήμη cache επιτρέπει το Jet για να λάβετε γρήγορες ανάγνωση εμπρός και έναρξης επόμενης εργασίας εγγραφής Αποθήκευση σε buffer.

Για να προσδιορίσετε αν μια διαδικασία αντιμετωπίζει μνήμη διαρροών, χρησιμοποιήστε την Εποπτεία επιδόσεων των Windows (Perfmon.exe) και την παρακολούθηση των ιδιωτικών Byte στην κατηγορία διαδικασία για την εφαρμογή σας. Ιδιωτικά byte είναι το συνολική μνήμη ότι η διαδικασία που έχει εκχωρηθεί, αλλά δεν γίνεται κοινή χρήση με άλλους διεργασίες. Σημειώστε ότι αυτό είναι διαφορετικό από τα εικονικά byte, η οποία είναι επίσης Για να εποπτεύσετε ενδιαφέρουσες. Εικονικά byte είναι το τρέχον μέγεθος σε byte για το ο χώρος εικονικών διευθύνσεων που χρησιμοποιεί η διεργασία. Μια εφαρμογή μπορεί να προκαλέσει απώλεια εικονικό μνήμη, αλλά δεν μπορεί να δείτε μια διαφορά των ιδιωτικών byte που έχουν εκχωρηθεί. Εάν δεν βλέπετε μνήμης αυξάνεται όταν παρακολουθείτε ιδιωτικών byte, αλλά μπορείτε υποπτεύεται ότι εξακολουθεί να εκτελείται από τη μνήμη, οθόνη εικονικά byte για να δείτε Εάν χρησιμοποιείτε εικονική μνήμη. Για πρόσθετες πληροφορίες σχετικά με τον εντοπισμό διαρροών μνήμης και την επισκόπηση της εποπτείας επιδόσεων των Windows (Perfmon.exe), επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:
http://MSDN.Microsoft.com/en-us/library/ms404355.aspx
Για να βεβαιωθείτε ότι η εφαρμογή σας παρουσιάζει διαρροή μνήμης, τοποθετήστε το υποψίες κώδικα σε ένα βρόχο με πολλές επαναλήψεις, και στη συνέχεια να παρακολουθήσετε ιδιωτικό και εικονικά byte για κάθε αύξησης της μνήμης. Παρακολούθηση για να βεβαιωθείτε ότι ο αριθμός των ιδιωτικών byte και εικονικά byte δεν τελικά παραμένουν τα ίδια και η αριθμός διακόπτει την αύξηση. Εάν υπάρχει ένα σημείο στο οποίο διακόπτεται η μνήμη αύξηση, (για παράδειγμα, δεν συνεχίζει να ανέλθουν πρανή απεριόριστα) μπορείτε να το κάνετε βλέπετε μια διαρροή μνήμης, αλλά το πιο πιθανό, θα δείτε ένα χώρο προσωρινής αποθήκευσης που μεγαλώνει με την μέγιστο μέγεθος.

Εάν διαπιστώσετε ότι μπορείτε να δείτε μια διαρροή μνήμης, πριν από την Χρήση UMDH, ακολουθήστε τα εξής βήματα:
  1. Εγκαταστήστε το βοηθητικό πρόγραμμα UMDH.
  2. Ορίστε τη μεταβλητή περιβάλλοντος PATH του συστήματος για να συμπεριλάβετε το το φάκελο όπου έχετε εγκαταστήσει το UMDH.
  3. Η μεταβλητή περιβάλλοντος _NT_SYMBOL_PATH το Microsoft σύμβολο διαδρομή του διακομιστή, έτσι ώστε να UMDH να εντοπίσετε συμβόλων εντοπισμού σφαλμάτων τα αρχεία.
Το βοηθητικό πρόγραμμα UMDH που περιλαμβάνεται με τα εργαλεία εντοπισμού σφαλμάτων για Τα προϊόντα των Windows στην ακόλουθη τοποθεσία της Microsoft στο Web:
http://www.Microsoft.com/whdc/devtools/DDK/Default.mspx
Λήψη και εγκατάσταση του βοηθητικού προγράμματος και, στη συνέχεια, ρυθμίστε το σύστημα ΔΙΑΔΡΟΜΉΣ μεταβλητή περιβάλλοντος στη διαδρομή όπου είχαν εγκατασταθεί τα εργαλεία εντοπισμού σφαλμάτων.

Μπορείτε να χρησιμοποιήσετε UMDH, πρέπει να εγκαταστήσετε τα σύμβολα εντοπισμού σφαλμάτων σωστό για τα στοιχεία της εφαρμογής σας και το λειτουργικό σας σύστημα. Χρησιμοποιήστε το Microsoft Διακομιστή συμβόλων για την απόκτηση σύμβολα εντοπισμού σφαλμάτων για τα στοιχεία του Microsoft. Για περισσότερες πληροφορίες σχετικά με το διακομιστή συμβόλων της Microsoft, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
311503Χρήση του διακομιστή συμβόλων της Microsoft για να αποκτήσετε τα αρχεία συμβόλων εντοπισμού σφαλμάτων
UMDH προσπαθεί να εντοπίσει τα αρχεία συμβόλων, χρησιμοποιώντας το Μεταβλητή περιβάλλοντος _NT_SYMBOL_PATH. Η εντολή για να ορίσετε τη διαδρομή από μια γραμμή εντολών ενδέχεται να μοιάζει με το ακόλουθο κείμενο:
Ορισμός _NT_SYMBOL_PATH = SRV * c:\LocalSymbolCache
Για πρόσθετες πληροφορίες σχετικά με τη ρύθμιση συμβολική εντοπισμού σφαλμάτων πληροφορίες, ανατρέξτε στην ενότητα "Εντοπισμός σφαλμάτων σύμβολα" παρακάτω σε αυτό το άρθρο.

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

Καταγραφή σωρού Αποτυπώνει με UMDH

UMDH είναι ένα βοηθητικό πρόγραμμα που αποθηκεύει πληροφορίες σχετικά με τη μνήμη heap ανάθεση μιας διαδικασίας. Αυτές οι πληροφορίες περιλαμβάνουν τη στοίβα κλήσεων για κάθε κατανομή, τον αριθμό των αναθέσεων που γίνονται μέσω της εν λόγω στοίβα κλήσεων, και ο αριθμός των byte που καταναλώνονται μέσω του εν λόγω στοίβα κλήσεων. Για παράδειγμα:
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
Αυτό το αποτέλεσμα UMDH δείχνει ότι υπήρχαν 21280 (0x5320) αριθμός εκχωρημένων byte σύνολο από τη στοίβα κλήσεων. Τα 21280 byte έχουν διατεθεί από 20 (0x14) Διαχωρίστε τις εκχωρήσεις των 1064 byte (0x428). Η στοίβα κλήσεων δίνεται ένα αναγνωριστικό του BackTrace00053.

Για να δημιουργήσετε ένα αρχείο ένδειξης σφαλμάτων του σωρού εκχωρήσεις, πρέπει να χρησιμοποιήσετε το βοηθητικό πρόγραμμα Gflags.exe, το οποίο περιλαμβάνεται επίσης με τα προϊόντα εργαλεία εντοπισμού σφαλμάτων των Windows, για να αφήσετε το λειτουργικό σύστημα που γνωρίζετε θέλετε τον πυρήνα για την παρακολούθηση των εκχωρήσεων.

Ας υποθέσουμε ότι θέλετε Για να αποτυπώσουν τα περιεχόμενα του heap(s) για το Notepad.exe. Πρώτα πρέπει να ενεργοποιήσετε την ανίχνευση στοίβας απόκτηση της εφαρμογής που θέλετε να ελέγξετε. Από προεπιλογή, αυτή η δυνατότητα δεν είναι ενεργοποιημένη. Η εντολή για να ενεργοποιήσετε αυτήν τη δυνατότητα, είναι ως εξής:
Gflags -i notepad.exe + σαρμογή
Η εντολή δεν ενεργοποιήσετε την ανίχνευση στοίβας για τις διεργασίες που είναι εκτελείται ήδη, αλλά επιτρέπει την παρακολούθηση στοίβας για όλες τις μελλοντικές εκτελέσεις του Notepad.exe. Εναλλακτικά, μπορείτε να ορίσετε τη σημαία από το χρήστη GFLAGS διασύνδεση (εκτέλεση Gflags.exe χωρίς ορίσματα για τη λήψη του περιβάλλοντος εργασίας χρήστη). Χρήση η επιλογή - σαρμογή gflags για να απενεργοποιήσετε την ανίχνευση στοίβας όταν είστε ολοκληρωθεί ο εντοπισμός σφαλμάτων.

Όταν ορίζετε τις σημαίες εικόνας μέσω Gflags.exe, και ορίζετε τα σύμβολα εντοπισμού σφαλμάτων, είστε έτοιμοι να ξεκινήσετε το Σημειωματάριο (το εφαρμογή που χρησιμοποιεί UMDH). Μετά την εκκίνηση του προγράμματος, θα πρέπει να Καθορίζει το Αναγνωριστικό διαδικασίας (PID) της διαδικασίας Σημειωματάριο (Notepad) που μόλις ξεκίνησε. Η εντολή για αυτό είναι ως εξής:
tlist
Μπορείτε να βρείτε από το αποτέλεσμα της εφαρμογής TLIST PID. Το PID μπορείτε επίσης να λάβετε πληροφορίες από τη Διαχείριση εργασιών. Ας υποθέσουμε ότι το αναγνωριστικό Προϊόντος για η διαδικασία Σημειωματάριο (Notepad) που μόλις ξεκίνησε είναι 124. Μπορείτε να χρησιμοποιήσετε το UMDH για να λάβετε μια ένδειξη σωρού με την ακόλουθη εντολή:
umdh - p: 124 - f:notepad124.log
Αποτελέσματα: έχετε μια ένδειξη σωρού ολοκλήρωση της διαδικασίας του Σημειωματάριου (Notepad) σε το Το αρχείο Notepad124.log. Αυτό το αρχείο εμφανίζει όλες τις εκχωρήσεις που έγιναν και το callstacks όπου έγιναν τις εκχωρήσεις.

Χρήση Umdh.exe για να συγκρίνετε τα αρχεία καταγραφής UMDH

Ενώ το αρχείο καταγραφής UMDH περιέχει πολύτιμες πληροφορίες σχετικά με το τρέχουσα κατάσταση του τους σωρούς για μια διεργασία, εάν είστε ενδιαφέρονται για την εύρεση μιας "διαρροή" μνήμης, μπορεί να είναι πιο πολύτιμα για να συγκρίνετε τις εξόδους των δύο αρχείων καταγραφής και Μάθετε τι στοίβα κλήσεων έχει δει η μεγαλύτερη αύξηση μεταξύ των αρχείων ένδειξης σφαλμάτων δύο. Το βοηθητικό πρόγραμμα Umdh.exe σας βοηθά να συγκρίνετε δύο αρχεία καταγραφής UMDH για να παρέχουν μια ανάλυση του το διαφορά μεταξύ τους. Αφού δύο αρχεία καταγραφής που αποτυπώνονται σε διαφορετικό χρονικά διαστήματα, μπορεί, στη συνέχεια, χρησιμοποιήστε την ακόλουθη εντολή:
UMDH dh1.log dh2.log > cmp12.txt
- ή -
UMDH -d dh2.log dh1.log > cmp12.txt
UMDH για να εμφανίσετε σε δεκαδική μορφή αντί για σας ενημερώνει για την επιλογή γραμμής εντολών -d δεκαεξαδικό. Το αποτέλεσμα της εντολής συγκρίνει τις διαφορές από την κατανομή μεταξύ των δύο αρχείων καταγραφής και παρέχει πληροφορίες που είναι παρόμοια με το ακόλουθο κείμενο:
+ 5320 (f110 - 9df0) 3α εκχωρήσεις BackTrace00053 Συνολική αύξηση == 5320
Για κάθε BackTrace στα αρχεία καταγραφής UMDH, υπάρχει μια σύγκριση έγιναν μεταξύ των δύο αρχεία καταγραφής αρχείων. Αυτή η υπόθεση δείχνει ότι το τελευταίο αρχείο καταγραφής που είναι καθορίζεται στο UMDH της γραμμής εντολών είχε εκχωρημένα κατά το πρώτο byte 0xF110 αρχείο καταγραφής στη γραμμή εντολών UMDH είχε 0x9DF0 bytes που διατίθενται για το ίδιο BackTrace (στοίβα κλήσεων). "5320" Είναι η διαφορά του αριθμού των byte που έχει εκχωρηθεί. Στο αυτή την περίπτωση, υπήρχαν 0x5320 περισσότερα byte κατανέμεται μεταξύ των ωρών που το δύο αρχεία καταγραφής έχουν καταγραφεί. Τα byte που προήλθε από τη στοίβα κλήσεων που προσδιορίζεται από "BackTrace00053".

Το επόμενο βήμα είναι να μάθετε τι είναι που backtrace. Εάν ανοίξετε το δεύτερο αρχείο καταγραφής και κάντε αναζήτηση για BackTrace00053, θα παρατηρήσετε ότι κάτι παρόμοιο με το ακόλουθο:
00005320 bytes in 0x14 allocations (@ 0x00000428) by: BackTrace00053
           ntdll!RtlDebugAllocateHeap+0x000000FD
           ntdll!RtlAllocateHeapSlowly+0x0000005A
           ntdll!RtlAllocateHeap+0x00000808
           MyApp!_heap_alloc_base+0x00000069
           MyApp!_heap_alloc_dbg+0x000001A2
           MyApp!_nh_malloc_dbg+0x00000023
           MyApp!_nh_malloc+0x00000016
           MyApp!operator new+0x0000000E
           MyApp!LeakyFunc+0x0000001E
           MyApp!main+0x0000002C
           MyApp!mainCRTStartup+0x000000FC
           KERNEL32!BaseProcessStart+0x0000003D
				
Όταν προβάλλετε τη στοίβα κλήσεων, μπορείτε να δείτε ότι η συνάρτηση LeakyFunc εκχωρεί μνήμη έως τη βιβλιοθήκη χρόνου εκτέλεσης Visual C++ νέα συνάρτηση τελεστή. Εάν νομίζετε ότι τον αριθμό των αναθέσεων μεγαλώνει καθώς λαμβάνουν περισσότερα αρχεία ένδειξης σφαλμάτων, που μπορεί να συναχθεί το συμπέρασμα ότι η μνήμη δεν αποδεσμεύεται.

Ενεργοποίηση ίχνη στοίβας

Οι πιο σημαντικές πληροφορίες στα αρχεία καταγραφής UMDH είναι τα ίχνη στοίβας από τις εκχωρήσεις heap. Μπορείτε να αναλύσετε τους για να επαληθεύσετε εάν μια διαδικασία διαρροών σωρού η μνήμη. Από προεπιλογή, αυτά τα ίχνη στοίβας δεν αγοράζονται. Μπορείτε να ενεργοποιήσετε αυτό δυνατότητα ανά διεργασία ή όλο το σύστημα. Χρησιμοποιήστε την ακόλουθη εντολή για να ενεργοποιήσετε την στοίβα η ανίχνευση ολόκληρου του συστήματος:
Gflags - r + σαρμογή
Κάντε επανεκκίνηση του υπολογιστή μετά από αυτήν την εντολή. Για κάθε διαδικασία Ενεργοποίηση, η εντολή είναι ως εξής:
Gflags -i ΌΝΟΜΑ_ΕΦΑΡΜΟΓΉΣ + σαρμογή
Όπου ΌΝΟΜΑ είναι το όνομα αρχείου του εκτελέσιμου αρχείου, συμπεριλαμβανομένης της επέκτασης (για παράδειγμα, το Services.exe, Lsass.exe). Η εντολή δεν ενεργοποιηθεί η ανίχνευση στοίβας για μια διεργασία που εκτελείται ήδη. Επομένως, για τις διαδικασίες που δεν είναι δυνατή η Κάντε επανεκκίνηση του (για παράδειγμα, υπηρεσίες, lsass, το winlogon), πρέπει να επανεκκινήσετε δοκιμή σας ο υπολογιστής.

Χρησιμοποιήστε τις ακόλουθες εντολές για να ελέγξετε τι έχετε ρυθμίσεις έχει οριστεί σε όλο το σύστημα ή για μια συγκεκριμένη διαδικασία: όλο το σύστημα:
Gflags - r
Συγκεκριμένη διαδικασία:
Gflags -i ΌΝΟΜΑ
Από προεπιλογή, το βάθος ανίχνευση στοίβας μέγιστο είναι 16. Εάν θέλετε να Δείτε βαθύτερα callstacks, μπορείτε να αυξήσετε αυτήν εκτελώντας GFLAGS. Κάντε κλικ στην επιλογή Μητρώο του συστήματος, και στη συνέχεια πληκτρολογήστε ένα νέο βάθος στο το Max. Στοίβα βάθος καταγραφή ανίχνευση στοιχείο ελέγχου επεξεργασίας. Κάντε κλικ στο κουμπί εφαρμογή, και στη συνέχεια, κάντε επανεκκίνηση του υπολογιστή.
ΣΗΜΑΝΤΙΚΌ: Εάν χρησιμοποιείτε Windows NT 4.0 Service Pack 6, πρέπει να χρησιμοποιήσετε Umdh_nt4.exe, αντί να Umdh.exe, και πρέπει να χρησιμοποιήσετε το Gflags -r εντολή ανίχνευση στοίβας όλο το σύστημα. Βεβαιωθείτε ότι έχετε Επανεκκινήστε τον υπολογιστή σας. Ανίχνευση στοίβας Umdh_nt4 δεν λειτουργεί σε ένα ανά διαδικασία βάση στα Windows NT έκδοση 4. Πρέπει να οριστούν για ολόκληρο το σύστημα.

Εντοπισμός σφαλμάτων σύμβολα

Ένα από τα πιο σημαντικά βήματα με τη χρήση UMDH είναι να βεβαιωθείτε ότι ότι έχετε καλή σύμβολο αρχεία (αρχείο αξεδιάλυτες ή .pdb) για να λάβετε ένα ίχνος στοίβας καλή. Τουλάχιστον, χρειάζεστε τα αρχεία συμβόλων Kernel32.dbg και Ntdll.dbg. Μπορείτε να απόκτηση επιπλέον σύμβολα εντοπισμού σφαλμάτων που μπορεί να χρειάζεστε όπως μπορείτε να βρείτε περισσότερες σχετικά με το ποια στοιχεία διαρροή μνήμης. Για περισσότερες πληροφορίες σχετικά με τον τρόπο για να λάβετε αρχεία συμβόλων εντοπισμού σφαλμάτων της Microsoft τα στοιχεία, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
311503Χρήση του διακομιστή συμβόλων της Microsoft για να αποκτήσετε τα αρχεία συμβόλων εντοπισμού σφαλμάτων
Για πρόσθετες πληροφορίες σχετικά με τη χρήση του Διακομιστή συμβόλων της Microsoft και τον τρόπο απόκτησης πακέτα συμβόλων για τα Windows, επισκεφθείτε την τοποθεσία Web της Microsoft:
http://www.Microsoft.com/whdc/devtools/DDK/Default.mspx
Όταν δημιουργείτε στοιχεία με Visual C++, είναι σημαντικό που δεν έχετε βάση δεδομένων του προγράμματος για επεξεργασία και συνέχεια επιλέξει για την C++ Οι επιλογές μεταγλωττιστή. Αντίθετα, επιλέξτε βάση δεδομένων του προγράμματος. Για να ορίσετε τη διαδρομή σύμβολο, η προετοιμασία της μεταβλητής περιβάλλοντος _NT_SYMBOL_PATH στη διαδρομή που θα χρησιμοποιηθεί. Μπορείτε να χρησιμοποιήσετε το διακομιστή συμβόλων της Microsoft για την απόκτηση σύμβολα για το Microsoft στοιχεία.
311503 Χρήση του διακομιστή συμβόλων της Microsoft για να αποκτήσετε τα αρχεία συμβόλων εντοπισμού σφαλμάτων
Ακολουθήστε τα εξής βήματα για να ορίσετε το _NT_SYMBOL_PATH μεταβλητή περιβάλλοντος:
  1. Στον πίνακα ελέγχου, κάντε διπλό κλικ στο σύστημα.
  2. Κάντε κλικ στην καρτέλα για προχωρημένους και, στη συνέχεια, κάντε κλικ στο κουμπί μεταβλητές περιβάλλοντος.
Ή μπορείτε να ορίσετε τη μεταβλητή περιβάλλοντος _NT_SYMBOL_PATH σε ένα παράθυρο εντολής πριν την εκτέλεση UMDH.

ΣΗΜΕΊΩΣΗ: περιλαμβάνει επίσης τη διαδρομή προς το PDB για τα στοιχεία σας εφαρμογή. Για παράδειγμα, μπορείτε να ορίσετε τη διαδρομή για _NT_SYMBOL_PATH με το ακόλουθο:
SRV*c:\symbols*http://MSDL.Microsoft.com/Download/Symbols;c:\myapplicationssymbols
Το πρώτο μέρος αυτής της διαδρομής που οδηγεί στο διακομιστή συμβόλων της Microsoft και ότι θα ληφθούν τα σύμβολα που χρησιμοποιούνται σε το c:\symbols μέλη ο φάκελος. Το τμήμα που ακολουθεί το ελληνικό ερωτηματικό είναι η διαδρομή προς τα αρχεία PDB (σύμβολο αρχεία) ειδικά για την εφαρμογή της διαρροής.

Κλήση του UMDH

Το μόνο απαιτούμενη παράμετρος γραμμής εντολών για το UMDH είναι η επιλογή -p , η οποία καθορίζει το αναγνωριστικό Προϊόντος της διαδικασίας από την οποία ένα σωρό θα λαμβάνεται ένδειξης σφαλμάτων. Μπορείτε να αποκτήσετε το PID χρησιμοποιώντας τη Διαχείριση εργασιών ή το Πρόγραμμα tlist.exe. Για μια παρόμοια με την ακόλουθη εντολή, θα είναι το αρχείο καταγραφής που αποτελούν αντικείμενο ντάμπινγκ στην τυπική έξοδο:
umdh - p: PID
UMDH εμφανίζει επίσης διάφορα πληροφοριακά μηνύματα σε τυπική σφάλμα, και, επομένως, εάν δεν ανακατευθύνετε αυτό, είναι αναμεμειγμένα με το πραγματικό αρχείο καταγραφής. Για να συλλέξετε τα UMDH πληροφοριακά μηνύματα σε ένα αρχείο, χρησιμοποιήστε την ακόλουθη εντολή:
umdh - p: PID 2>umdh.msg
Εάν θέλετε να συγκεντρώσετε το αρχείο καταγραφής που αποθηκεύεται από UMDH σε ένα αρχείο, Χρησιμοποιήστε μία από τις ακόλουθες εντολές:
umdh - p: PID > umdh.log
- ή -
umdh - p: PID-f:umdh.log
Αυτές οι εντολές είναι ισοδύναμες.

Το προεπιλεγμένο αρχείο καταγραφής που είναι που λαμβάνονται από UMDH περιέχει μια απαρίθμηση των καταναλωτών σωρού που ταξινομούνται κατά Πλήθος εκχωρήσεων. Εάν, για σκοπούς εντοπισμού σφαλμάτων, χρειάζεστε επίσης ένα αρχείο ένδειξης σφαλμάτων όλων το μπλοκ που έχει εκχωρηθεί με τους αντίστοιχους ίχνη στοίβας, μπορεί να χρησιμοποιηθεί η επιλογή -d :
umdh - p: PID -δ
Εάν χρησιμοποιήσετε αυτήν την εντολή, ενδέχεται να δείτε το ακόλουθο στο UMDH του αρχείο καταγραφής:
Εκχωρήσεις για ανίχνευση BackTrace00046: 005F69A0 005F6150
Αυτές είναι οι διευθύνσεις μνήμης των κονδυλίων που χορηγούνται για την οποία στοίβα κλήσεων. Εάν το πρόγραμμα εντοπισμού σφαλμάτων είναι συνδεδεμένο με τη διαδικασία, να αποτυπώσουν την περιεχόμενα της μνήμης σε αυτές τις διευθύνσεις για να δείτε τι έχει εκχωρηθεί.

Εάν το αρχείο καταγραφής περιέχει πληροφορίες πάρα πολύ, μπορεί να περιοριστεί μόνο σε μεγάλο τους χρήστες που έχουν την κατανομή καταμέτρηση πάνω από ένα συγκεκριμένο όριο. Χρήση του η ακόλουθη εντολή:
umdh - p: PID - t: ΌΡΙΟ
Όλες οι επιλογές της γραμμής εντολών (για παράδειγμα, -p, -f, -t, -d) μπορεί να καθοριστεί ταυτόχρονα με οποιαδήποτε σειρά. Το ακόλουθο είναι ένα πιο δύσκολο παράδειγμα της γραμμής εντολών:
umdh - p: 123 - t: 1000 - f:umdh.log -d
Αυτή η εντολή αποθηκεύει τους σωρούς για τη διεργασία με PID 123 σε το αρχείο Umdh.log. Μεταφέρει το λογαριασμό αυτό μόνον ίχνη στοίβας για περισσότερα από 1000 εκχωρήσεις και απορρίπτει επίσης τις διευθύνσεις των μπλοκ σωρού που είναι χορηγηθεί μέσω κάθε ίχνος στοίβας.

Είναι μια άλλη χρήσιμη επιλογή UMDH η επιλογή -l . Αυτό προκαλεί αριθμούς αρχείων και γραμμή να εκτυπωθούν με το στοίβα κλήσεων όταν είναι δυνατόν.

UMDH εξόδου εξηγείται

Εάν πραγματοποιήσατε ανακατεύθυνση του αρχείου καταγραφής σε ένα αρχείο (umdh - p: PID-f:umdh.log), τα περιεχόμενα είναι παρόμοιο με το ακόλουθο, η οποία αποκτήθηκε από μια διεργασία που εκτελείται Σημειωματάριο (Notepad):
UMDH: Logtime 2000-06-28 10:54 - Machine=MYMachine - PID=704
   *********** Heap 00270000 Information ********************
       Flags: 58000062
       Number Of Entries: 87
       Number Of Tags: <unknown>
       Bytes Allocated: 00008DF0
       Bytes Committed: 0000A000
       Total FreeSpace: 00001210
       Number of Virtual Address chunks used: 1
       Address Space Used: <unknown>
       Entry Overhead: 8
       Creator:  (Backtrace00007)
           ntdll!RtlDebugCreateHeap+0x00000196
           ntdll!RtlCreateHeap+0x0000023F
           ntdll!LdrpInitializeProcess+0x00000369
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
   *********** Heap 00270000 Hogs ********************
   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00031
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007

   000001A0 bytes in 0x4 allocations (@ 0x00000068) by: BackTrace00034
           ntdll!RtlDebugAllocateHeap+0x000000FB
           ntdll!RtlAllocateHeapSlowly+0x0000005B
           ntdll!RtlAllocateHeap+0x00000D81
           ntdll!LdrpAllocateDataTableEntry+0x00000039
           ntdll!LdrpMapDll+0x000002A4
           ntdll!LdrpLoadImportModule+0x0000010D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpLoadImportModule+0x0000011D
           ntdll!LdrpWalkImportDescriptor+0x0000008B
           ntdll!LdrpInitializeProcess+0x000009DC
           ntdll!LdrpInitialize+0x0000028D
           ntdll!KiUserApcDispatcher+0x00000007
				
Το αρχείο καταγραφής περιέχει μια ένδειξη του κάθε σωρού στη διαδικασία. Σε αυτό το παράδειγμα,το το αρχείο καταγραφής ξεκινά με ένα σωρό στη διεύθυνση 270000. Μετά από λίγα καθολικούς μετρητές για το heap, το αρχείο καταγραφής περιέχει μια ένδειξη σε φθίνουσα σειρά ταξινόμησης ίχνη στοίβας που είναι υπεύθυνα για τις περισσότερες εκχωρήσεις. Όταν συγκρίνετε τη δυναμική του μνήμης που χρησιμοποιούνται σε διαφορετικές λεπτά, μπορεί να συμπεράνει τι συνέβη με το διαδικασία και εάν τυχόν χρήση σωρού είναι παρόμοια με μια διαρροή.

Ζητήματα που ενδέχεται να αντιμετωπίσετε όταν χρησιμοποιείτε UMDH

Τα πιο συνηθισμένα σφάλματα κατά τη χρήση UMDH προκύψει επειδή στοίβας ανίχνευση δεν είναι ενεργοποιημένη. Επίσης, εσφαλμένη σύμβολα για Ntdll.dll εμποδίζει UMDH από εκτελείται. Για τα υπόλοιπα αρχεία συμβόλων, εκτελεί τον UMDH, αλλά το αρχείο καταγραφής περιέχει στοίβας ίχνη που δεν έχουν ονόματα συναρτήσεων αλλά έχουν σχετικές διευθύνσεις μέσα σε λειτουργικές μονάδες. Ένα σφάλμα μακρινός τρίτων είναι Καθορίζει ένα εσφαλμένο PID. Τα ακόλουθα μήνυμα λάθους προκύπτει όταν προσπαθείτε να εκτελέσετε UMDH για μια διεργασία που δεν έχει ενεργοποιημένη η ανίχνευση στοίβας:
C:\>umdh - p: 1140 UMDH: Logtime 2000-06-28 12:43 - Machine = MyMachine - PID = 1140 σύνδεση...Λειτουργική μονάδα η απαρίθμηση είναι πλήρης. SymGetSymFromName (διεργασία, ntdll!RtlpStackTraceDataBase, xxx) απέτυχε, τελευταίο σφάλμα = 126 UmdhGetAddrFromName δεν μπόρεσε να βρει DB ίχνος στοίβας δείκτης (ntdll!RtlpStackTraceDataBase). σύμβολα Ntdll.dll είναι σωστή. μας πρέπει να μπορείτε να δείτε τα σύμβολα-εισαγωγή.
Χρησιμοποιήστε την ακόλουθη εντολή για να Ελέγξτε προσεκτικά τις ρυθμίσεις για τη διαδικασία που ερευνάτε:
Gflags -i ΌΝΟΜΑ_ΕΦΑΡΜΟΓΉΣ
Χρησιμοποιήστε την ακόλουθη εντολή, όταν που βασίζονται σε στοίβα σε όλο το σύστημα ανίχνευση:
Gflags - r
Αυτές οι εντολές εμφάνιση της λίστας των σημαιών που έχουν οριστεί για την εφαρμογή. Σημειώστε ότι για την ανίχνευση στοίβας όλο το σύστημα, η δυνατότητα μπορεί να εμφανίζεται ως ενεργό αλλά εάν δεν επανεκκίνηση του υπολογιστή μετά την εκτέλεση της εντολής gflags - r + σαρμογή , δεν είναι στην πραγματικότητα ενεργό. Εάν θέλετε να γνωρίζετε κάθε εφαρμογή η οποία έχει ενεργοποιηθεί η ανίχνευση στοίβας, μπορείτε να προβάλετε τον αριθμό-κλειδί USTEnabled στο ακόλουθο κλειδί μητρώου:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image αρχείο Επιλογές εκτέλεσης
Εάν εκτελέσετε το UMDH σε μια διαδικασία που έχει ενεργοποιηθεί, η ανίχνευση στοίβας αλλά η εφαρμογή δεν επανεκκίνηση αφού ορίσετε τις σημαίες, ενδέχεται να λάβετε το ακόλουθο μήνυμα στο αρχείων καταγραφής σας:
Ήταν ένα ίχνος στοίβας δεν αποθηκεύονται για αυτή την κατανομή (ευρετήριο == 0)
Εάν εκτελέσετε δεν ορίσετε το σωστή διαδρομή συμβόλων ή τα σύμβολα δεν είναι σωστές και εκτελέστε το UMDH, που μπορεί λαμβάνετε ένα μήνυμα λάθους στο αρχείο καταγραφής. Ωστόσο, ενδέχεται να εμφανίζεται μόνον εσφαλμένη ή παραπλανητική callstacks. Για να βεβαιωθείτε ότι έχετε τα σωστά σύμβολα, ξεκινήστε το NTSD πρόγραμμα εντοπισμού σφαλμάτων για μια διεργασία, για παράδειγμα:
το Ntsd Σημειωματάριο
Στη συνέχεια, από την κονσόλα του προγράμματος εντοπισμού σφαλμάτων, εκτελέστε την εντολή LD να φορτώσει τις πληροφορίες σύμβολο για τη λειτουργική μονάδα και η εντολή LM για να παραθέσετε τις λειτουργικές μονάδες έχετε τους σύμβολα που έχουν φορτωθεί. Εάν το αποτέλεσμα της εντολής LM εμφανίζει τα σύμβολα εξαγωγής φορτωθεί, τα σύμβολα δεν είναι καλή. IF έχετε σύμβολα PDB φορτωθεί, τα σύμβολα είναι καλή. Ενδέχεται να λάβετε το ακόλουθο μήνυμα λάθους Εάν καθορίσατε εσφαλμένο PID:
C:\>umdh - p: 1000 UMDH: Logtime 2000-06-28 09:45 - Machine = MyMachine - PID = 1000 σύνδεση... Απέτυχε OpenProcess, τελευταίο σφάλμα = 0x57

Κλήση UMDH από τη Visual Basic

Μπορεί να είναι χρήσιμο μερικές φορές για να αποτυπώσουν έναν αριθμό αρχείων καταγραφής σε ένα χρονικό διάστημα επειδή η διαρροή δεν μπορεί να είναι πολύ αισθητή στην αρχή. Για παράδειγμα, εάν έχετε υποψίες ότι η εφαρμογή Web ενεργών σελίδων διακομιστή (ASP) που παρουσιάζει διαρροή μνήμης, μπορεί να είναι χρήσιμο για να γράψετε ένα στοιχείο COM της Visual Basic που shells αναφέρονται σε UMDH. Στη συνέχεια, μπορείτε να καλέσετε αυτό το στοιχείο από τη σελίδα σας ASP.

Το παρακάτω είναι μερικά κώδικα της Visual Basic που καλεί UMDH και δημιουργεί ένα αρχείο καταγραφής με βάση την τρέχουσα ώρα:
Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
      Public Function GetProcessID()
      GetProcessID = GetCurrentProcessId()
      End Function  
   .
   .
   .
      Dim strTime As String

      Dim sProcID As String
      sProcID = GetProcessID()
      strTime = "MYLOG_" & Format(Now(), "hhmm")
     
      Shell ("C:\UMDH\umdh -p:" & sProcID & " -f:d:\logs\" & strTime & ".txt")
				

Χρήση UMDH με Windows NT 4.0 Service Pack 6a (SP6a)

Το βοηθητικό πρόγραμμα UMDH που περιλαμβάνεται με τα εργαλεία εντοπισμού σφαλμάτων για Τα προϊόντα των Windows δεν λειτουργεί στα Windows NT 4.0. Ένα εκτελέσιμο αρχείο αυτόματης εξαγωγής (Umdhnt4tools.exe) που περιλαμβάνεται με αυτό το άρθρο και περιέχει τα ακόλουθα Εργαλεία για χρήση με NT 4.0:
  • Umdh_nt4.exe και την Dbghelp.dll
    Αυτό είναι το Windows NT 4.0 Έκδοση SP6 του βοηθητικού προγράμματος UMDH.
  • Dhcmp.exe
    Αυτό το βοηθητικό πρόγραμμα χρησιμοποιείται για να συγκρίνετε δύο UMDH Οι ενδείξεις για να προσδιορίσετε όπου μια πιθανή μνήμη διαρροή occurrs.
Το ακόλουθο αρχείο είναι διαθέσιμο για λήψη από τη λήψη της Microsoft Κέντρο:
Σύμπτυξη αυτής της εικόναςΑνάπτυξη αυτής της εικόνας
Λήψη
Άμεση λήψη του Umdhnt4tools.exe
Ημερομηνία έκδοσης:, 28 Αυγούστου 2002

Για περισσότερες πληροφορίες σχετικά με τον τρόπο λήψης αρχείων υποστήριξης της Microsoft, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
119591 Τρόπος απόκτησης αρχείων υποστήριξης της Microsoft από ηλεκτρονικές υπηρεσίες
Η Microsoft εξέτασε αυτό το αρχείο για ιούς. Η Microsoft χρησιμοποίησε το πιο πρόσφατο λογισμικό εντοπισμού ιών που ήταν διαθέσιμο κατά την ημερομηνία στην οποία καταχωρήθηκε το αρχείο. Το αρχείο είναι αποθηκευμένο σε διακομιστές με ενισχυμένη ασφάλεια που βοηθούν στην αποτροπή μη εξουσιοδοτημένων αλλαγών στο αρχείο. Τοποθέτηση Umdh_nt4.exe και Dbghelp.dll σε ένα φάκελο, και στη συνέχεια τοποθετήσετε πρώτα σε σας μεταβλητή περιβάλλοντος PATH. Χρήση Umdh_nt4.exe αντί για UMDH.

Σε έναν υπολογιστή που εκτελεί τα Windows NT 4.0, πρέπει να χρησιμοποιήσετε Gflags.exe ανίχνευση στοίβας όλο το σύστημα. Για παράδειγμα:
Gflags - r
Βεβαιωθείτε ότι κάνετε επανεκκίνηση του υπολογιστή σας. Ανίχνευση στοίβας Umdh_nt4 δεν λειτουργεί σε βάση ανά διεργασία σε Windows NT έκδοση 4.0. Έχει οριστεί για ολόκληρο το σύστημα.

Είναι UMDH_NT4 σε αντίθεση με την UMDH ότι δεν έχει σύγκριση αρχείων καταγραφής. Για παράδειγμα, δεν είναι δυνατό να κάνετε τα εξής:
UMDH_NT4 dh1.log dh2.log > cmp12.txt
Αντίθετα, πρέπει να χρησιμοποιήσετε το βοηθητικό πρόγραμμα Dhcmp.exe που περιλαμβάνεται με Αυτό το άρθρο. Η εντολή είναι παρόμοια με τα ακόλουθα:
DHCMP dh1.log dh2.log > cmp12.txt

Ιδιότητες

Αναγν. άρθρου: 268343 - Τελευταία αναθεώρηση: Παρασκευή, 7 Ιουνίου 2013 - Αναθεώρηση: 3.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Server 4.0 Standard Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
Λέξεις-κλειδιά: 
kbdownload kbarttypeshowme kbfile kbgraphxlinkcritical kbhowto kbsample kbmt KB268343 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο έχει μεταφραστεί χρησιμοποιώντας λογισμικό μηχανικής μετάφρασης της Microsoft και μπορείτε να το διορθώσετε χρησιμοποιώντας την τεχνολογία Community Translation Framework (CTF) (Πλαίσιο μετάφρασης κοινότητας). Η Microsoft παρέχει μηχανική μετάφραση, επεξεργασία μετά τη μηχανική μετάφραση από την κοινότητα και άρθρα μεταφρασμένα από επαγγελματίες προκειμένου να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής βάσης σε πολλές γλώσσες. Τα άρθρα μηχανικής μετάφρασης και αυτά που επεξεργάζονται ύστερα από μηχανική μετάφραση ενδέχεται να περιέχουν σφάλματα στο λεξιλόγιο, στη σύνταξη ή/και στη γραμματική. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες μας. Για περισσότερες πληροφορίες σχετικά με το CTF, μεταβείτε στην τοποθεσία http://support.microsoft.com/gp/machine-translation-corrections/el.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη: 268343

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com