Dela via


Tolka en loggjämförelse

Du kan generera flera umdh-loggar (User-Mode Dump Heap) för samma process över tid. Sedan kan du använda UMDH för att jämföra loggarna och avgöra vilka minnesallokeringar i anropsstapeln som har ökat mest mellan försöken.

Följande kommando instruerar till exempel UMDH att jämföra två UMDH-loggar, Log1.txt och Log2.txt, och omdirigerar utdata till en tredje fil Compare.txt.

umdh -v Log1.txt Log2.txt > Compare.txt

Den resulterande Compare.txt-filen visar de anropsstackar som registrerats i varje logg och för varje stack visar ändringen i heap-allokeringen mellan loggfilerna.

Följande rad från filen visar till exempel ändringen i allokeringsstorleken för funktionerna i anropsstacken med etiketten "Backtrace00053".

I Log1.txtstår anropen i stacken för 40 432 (0x9DF0) byte, men i Log2.txtstår samma anropsstack för 61 712 (0xF110) byte, en skillnad på 21 280 (0x5320) byte.

+ 5320 (f110 - 9df0) 3a allocs BackTrace00053 
Total increase == 5320

Följande är stacken för resursfördelningen:

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

En undersökning av anropsstacken visar att funktionen LeakyFunc allokerar minne med hjälp av Visual C++-körningsbiblioteket. Om undersökningen av de andra loggfilerna visar att allokeringen växer över tid kan du kanske dra slutsatsen att minnet som allokerats från högen inte frigörs.

Symbolfiler för att analysera en loggfil

Anta att du har två datorer: en loggdator där du skapar en UMDH-logg och en analysdator där du analyserar UMDH-loggen. Symbolsökvägen på analysdatorn måste peka på symbolerna för den Windows-version som lästes in på loggningsdatorn när loggen gjordes. Rikta inte symbolsökvägen på analysdatorn mot en symbolserver. Om du gör det hämtar UMDH symboler för den windowsversion som körs på analysdatorn och UMDH visar inte meningsfulla resultat.

se även

Använda UMDH för att hitta en User-Mode minnesläcka