Partilhar via


Interpretando uma comparação de registos

Você pode gerar vários logs de User-Mode Dump Heap (UMDH) do mesmo processo ao longo do tempo. Em seguida, pode usar o UMDH para comparar os logs e determinar quais alocações de pilha de chamadas cresceram mais entre os testes.

Por exemplo, o comando a seguir direciona o UMDH para comparar dois logs UMDH, Log1.txt e Log2.txt, e redireciona a saída para um terceiro arquivo, Compare.txt.

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

O arquivo Compare.txt resultante lista as pilhas de chamadas gravadas em cada log e, para cada pilha, exibe a alteração nas alocações de heap entre os arquivos de log.

Por exemplo, a seguinte linha do arquivo mostra a alteração no tamanho da alocação para as funções na pilha de chamadas rotulada "Backtrace00053".

Em Log1.txt, as chamadas na pilha representam 40.432 (0x9DF0) bytes, mas em Log2.txt, a mesma pilha de chamadas representa 61.712 (0xF110) bytes, uma diferença de 21.280 (0x5320) bytes.

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

A pilha para a atribuição é a seguinte:

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

Um exame da pilha de chamadas mostra que a função LeakyFunc está alocando memória usando a biblioteca de tempo de execução do Visual C++. Se o exame dos outros arquivos de log mostrar que a alocação cresce com o tempo, você poderá concluir que a memória alocada do heap não está sendo liberada.

Arquivos de símbolos para analisar um arquivo de log

Suponha que você tenha dois computadores: um computador de registro onde você cria um log UMDH e um computador de análise onde você analisa o log UMDH. O caminho dos símbolos no computador de análise deve apontar para os símbolos da versão do Windows que estava carregada no computador de registo no momento em que o registo foi feito. Não direcione o caminho do símbolo no computador de análise para um servidor de símbolos. Se você fizer isso, o UMDH recuperará símbolos para a versão do Windows que está sendo executada no computador de análise e o UMDH não exibirá resultados significativos.

Ver também

Usando UMDH para encontrar uma fuga de memória no Modo de Utilizador