Поделиться через


Интерпретация сравнения журналов

С течением времени можно создать несколько журналов User-Mode дампа (UMDH) одного процесса. Затем можно использовать UMDH для сравнения журналов и определения того, какие выделения стека вызовов увеличились больше всего между пробными версиями.

Например, следующая команда направляет UMDH для сравнения двух журналов UMDH, Log1.txt и Log2.txt, и перенаправляет выходные данные в третий файл, Compare.txt.

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

В итоговом файле Compare.txt перечислены стеки вызовов, записанные в каждом журнале, и для каждого стека отображается изменение распределения кучи между файлами журнала.

Например, в следующей строке из файла показано изменение размера выделения для функций в стеке вызовов с меткой "Backtrace00053".

В Log1.txt вызовы в стеке составляют 40 432 (0x9DF0) байтов, но в Log2.txt же стек вызовов приходится 61 712 (0xF110) байтов, разница в 21 280 (0x5320) байтах.

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

Ниже приведен стек для выделения:

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

Анализ стека вызовов показывает, что функция LeakyFunc выделяет память с помощью библиотеки среды выполнения Visual C++. Если изучение других файлов журнала показывает, что выделение со временем увеличивается, можно сделать вывод о том, что память, выделенная из кучи, не освобождается.

Файлы символов для анализа файла журнала

Предположим, что у вас есть два компьютера: компьютер ведения журнала , на котором создается журнал UMDH, и компьютер анализа , на котором анализируется журнал UMDH. Путь к символам на компьютере анализа должен указывать на символы для версии Windows, которая была загружена на компьютере ведения журнала во время создания журнала. Не указывайте путь к символам на компьютере анализа на сервер символов. В этом случае UMDH извлекает символы для версии Windows, работающей на компьютере анализа, и UMDH не будет отображать значимые результаты.

См. также

Использование UMDH для поиска утечки памяти User-Mode