Interpretando uma comparação de logs
Você pode gerar vários logs do UMDH (Heap de Despejo de User-Mode) do mesmo processo ao longo do tempo. Em seguida, você pode usar UMDH para comparar os logs e determinar quais alocações de pilha de chamadas cresceram mais entre as avaliações.
Por exemplo, o comando a seguir direciona 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 registradas em cada log e, para cada pilha, exibe a alteração nas alocações de heap entre os arquivos de log.
Por exemplo, a linha a seguir 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 são responsáveis por 40.432 bytes (0x9DF0), mas, em Log2.txt, a mesma pilha de chamadas contabiliza 61.712 bytes (0xF110), uma diferença de 21.280 (0x5320) bytes.
+ 5320 (f110 - 9df0) 3a allocs BackTrace00053
Total increase == 5320
A seguir está a pilha para a alocação:
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 ao longo do tempo, você poderá concluir que a memória alocada do heap não está sendo liberada.
Arquivos de símbolo para analisar um arquivo de log
Suponha que você tenha dois computadores: um computador de registro em log em que você cria um log UMDH e um computador de análise em que você analisa o log UMDH. O caminho do símbolo no computador de análise deve apontar para os símbolos da versão do Windows que foi carregada no computador de registro em log no momento em que o log foi feito. Não aponte 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 em execução no computador de análise e o UMDH não exibirá resultados significativos.
Consulte Também
Usando UMDH para localizar um vazamento de memória User-Mode