Udostępnij przez


Interpretowanie porównania logów

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