Interprétation d’une comparaison de journaux

Vous pouvez générer plusieurs journaux UMDH (Dump Heap) User-Mode du même processus au fil du temps. Ensuite, vous pouvez utiliser UMDH pour comparer les journaux et déterminer quelles allocations de pile d’appels ont le plus augmenté entre les essais.

Par exemple, la commande suivante indique à UMDH de comparer deux journaux UMDH, Log1.txt et Log2.txt, et redirige la sortie vers un troisième fichier, Compare.txt.

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

Le fichier Compare.txt résultant répertorie les piles d’appels enregistrées dans chaque journal et, pour chaque pile, affiche la modification des allocations de tas entre les fichiers journaux.

Par exemple, la ligne suivante du fichier montre la modification de la taille d’allocation pour les fonctions dans la pile des appels intitulée « Backtrace00053 ».

Dans Log1.txt, les appels dans la pile comptent pour 40 432 octets (0x9DF0), mais dans Log2.txt, les mêmes comptes de pile d’appels pour 61 712 octets (0xF110), soit une différence de 21 280 octets (0x5320).

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

Voici la pile de l’allocation :

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

Un examen de la pile des appels montre que la fonction LeakyFunc alloue de la mémoire à l’aide de la bibliothèque d’exécution Visual C++. Si l’examen des autres fichiers journaux montre que l’allocation augmente au fil du temps, vous pouvez peut-être conclure que la mémoire allouée à partir du tas n’est pas libérée.

Fichiers de symboles pour l’analyse d’un fichier journal

Supposons que vous ayez deux ordinateurs : un ordinateur de journalisation où vous créez un journal UMDH et un ordinateur d’analyse où vous analysez le journal UMDH. Le chemin des symboles sur votre ordinateur d’analyse doit pointer vers les symboles de la version de Windows qui a été chargée sur l’ordinateur de journalisation au moment où le journal a été créé. Ne pointez pas le chemin des symboles sur l’ordinateur d’analyse vers un serveur de symboles. Dans ce cas, UMDH récupère les symboles de la version de Windows en cours d’exécution sur l’ordinateur d’analyse, et UMDH n’affiche pas de résultats significatifs.

Voir aussi

Utilisation de l’UMDH pour rechercher une fuite de mémoire User-Mode