Sdílet prostřednictvím


Interpretace porovnání protokolů

V průběhu času můžete vygenerovat více logů výpisu paměti haldy (UMDH) User-Mode pro stejný proces. Poté můžete pomocí UMDH porovnat protokoly a zjistit, které alokace volání v zásobníku vzrostly nejvíce mezi testy.

Například následující příkaz instruuje UMDH, aby porovnalo dva protokoly UMDH, Log1.txt a Log2.txt, a přesměruje výstup do třetího souboru, Compare.txt.

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

Výsledný soubor Compare.txt uvádí zásobníky volání zaznamenané v jednotlivých protokolech, a každému zásobníku zobrazí změnu přidělení haldy mezi jednotlivými soubory protokolu.

Například následující řádek ze souboru ukazuje změnu velikosti přidělené paměti pro funkce v zásobníku volání s popiskem Backtrace00053.

V Log1.txtvolání v zásobníku zaujímají 40 432 bajtů (0x9DF0), ale v Log2.txtstejný zásobník volání zaujímá 61 712 bajtů (0xF110), což je rozdíl 21 280 (0x5320) bajtů.

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

Následuje zásobník pro alokaci:

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

Prozkoumání zásobníku volání ukazuje, že funkce LeakyFunc přiděluje paměť pomocí knihovny runtime Visual C++. Pokud prozkoumání ostatních souborů protokolu ukazují, že přidělení v průběhu času roste, možná můžete dojít k závěru, že paměť přidělená z haldy není uvolňována.

soubory symbolů pro analýzu souboru protokolu

Předpokládejme, že máte dva počítače: počítač protokolování, kde vytvoříte protokol UMDH a počítač pro analýzu , kde analyzujete protokol UMDH. Cesta symbolů v analytickém počítači musí odkazovat na symboly pro verzi systému Windows, která byla nahrána na počítač, na kterém se provádí protokolování, v okamžiku vytvoření protokolu. Neukazujte cestu symbolu v počítači analýzy na server symbolů. Pokud ano, UMDH načte symboly pro verzi Systému Windows, která běží na analytickém počítači, a UMDH nezobrazí smysluplné výsledky.

viz také

Použití UMDH k nalezení User-Mode úniku paměti