Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Można wygenerować wiele logów sterty zrzutu User-Mode (UMDH) dla tego samego procesu w różnych momentach. Następnie możesz użyć funkcji UMDH, aby porównać dzienniki i określić, które alokacje stosu wywołań wzrosły najbardziej między próbami.
Na przykład następujące polecenie instruuje UMDH, aby porównał dwa dzienniki UMDH, Log1.txt i Log2.txt, a następnie przekierował wyniki do trzeciego pliku, Compare.txt.
umdh -v Log1.txt Log2.txt > Compare.txt
Wynikowy plik Compare.txt zawiera listę stosów wywołań zarejestrowanych w każdym dzienniku, a dla każdego stosu wyświetla zmianę alokacji sterty między plikami dziennika.
Na przykład poniższy wiersz z pliku przedstawia zmianę rozmiaru alokacji dla funkcji w stosie wywołań oznaczonym jako "Backtrace00053".
W Log1.txtwywołania w stosie odpowiadają za 40 432 (0x9DF0) bajtów, ale w Log2.txtten sam stos wywołań odpowiada za 61 712 (0xF110) bajtów, co stanowi różnicę 21 280 (0x5320) bajtów.
+ 5320 (f110 - 9df0) 3a allocs BackTrace00053
Total increase == 5320
Poniżej znajduje się stos alokacji:
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
Badanie stosu wywołań pokazuje, że funkcja LeakyFunc przydziela pamięć przy użyciu biblioteki uruchomieniowej Visual C++. Jeśli analiza innych plików dziennika pokazuje, że alokacja rośnie z czasem, można stwierdzić, że pamięć przydzielona ze sterty nie jest zwalniana.
Pliki symboli do analizowania pliku dziennika
Załóżmy, że masz dwa komputery: komputer rejestrowania , na którym tworzysz dziennik UMDH i komputer analizy , na którym analizujesz dziennik UMDH. Ścieżka symboli na komputerze analizy musi wskazywać symbole wersji systemu Windows, która została załadowana na komputerze rejestrowania w momencie utworzenia dziennika. Nie wskazuj ścieżki symboli na komputerze do analizy na serwer symboli. Jeśli to zrobisz, funkcja UMDH pobierze symbole dla wersji systemu Windows uruchomionej na komputerze analizy, a funkcja UMDH nie wyświetli znaczących wyników.
zobacz również
Używanie funkcji UMDH w celu wykrycia przecieku pamięci User-Mode