Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.