Préparation à l’utilisation de l’UMDH

Vous devez effectuer les tâches de configuration décrites dans cette section avant d’utiliser User-Mode tas de vidage (UMDH) pour capturer les allocations de tas pour un processus. Si l’ordinateur n’est pas configuré correctement, UMDH ne génère aucun résultat ou les résultats sont incomplets ou incorrects.

Créer la base de données de traces de pile en mode utilisateur

Avant d’utiliser UMDH pour capturer les allocations de tas d’un processus, vous devez configurer Windows pour capturer les traces de pile.

Pour activer la capture de traces de pile pour un processus, utilisez GFlags pour définir l’indicateur Créer une base de données de trace de pile en mode utilisateur pour le processus. Cela peut être effectué à l’aide de l’une des méthodes suivantes :

  • Dans l’interface graphique GFlags, choisissez l’onglet Fichier image . Tapez le nom du processus, y compris l’extension de nom de fichier (par exemple, Notepad.exe). Appuyez sur TAB , sélectionnez Créer une base de données de trace de pile en mode utilisateur, puis sélectionnez Appliquer.

  • Ou, de manière équivalente, utilisez la ligne de commande GFlags suivante, où ImageName est le nom du processus (y compris l’extension de nom de fichier) :

    gflags /iImageName+ust

Par défaut, la quantité de données de trace de pile collectées par Windows est limitée à 32 Mo sur un processeur x86 et à 64 Mo sur un processeur x64. Si vous devez augmenter la taille de cette base de données, choisissez l’onglet Fichier image dans l’interface graphique GFlags, tapez le nom du processus, appuyez sur la touche TAB, case activée la zone de case activée Stack Backtrace (Megs), tapez une valeur (en Mo) dans la zone de texte associée, puis sélectionnez Appliquer.

Note Augmentez cette base de données uniquement si nécessaire, car cela peut épuiser des ressources Windows limitées. Lorsque vous n’avez plus besoin de la plus grande taille, retournez ce paramètre à sa valeur d’origine.

Ces paramètres affectent toutes les nouvelles instances du programme. Cela n’affecte pas les instances en cours d’exécution du programme.

Accéder aux symboles nécessaires

Avant d’utiliser UMDH, vous devez avoir accès aux symboles appropriés pour votre application. UMDH utilise le chemin de symbole spécifié par la variable d’environnement _NT_SYMBOL_PATH. Définissez cette variable sur un chemin contenant les symboles de votre application.

Si vous incluez également un chemin d’accès aux symboles Windows, l’analyse peut être plus complète. La syntaxe de ce chemin de symbole est la même que celle utilisée par le débogueur ; Pour plus d’informations, consultez Chemin du symbole.

Par exemple, si les symboles de votre application se trouvent dans C:\MyApp\Symbols et que vous avez installé les fichiers de symboles Windows sur \\myshare\winsymbols, vous devez utiliser la commande suivante pour définir le chemin de votre symbole :

set _NT_SYMBOL_PATH=c:\myapp\symbols;\\myshare\winsymbols

Autre exemple, si les symboles de votre application se trouvent dans C:\MyApp\Symbols et que vous souhaitez utiliser le magasin de symboles Microsoft public pour vos symboles Windows, en utilisant C:\MyCache comme magasin en aval, vous devez utiliser la commande suivante pour définir le chemin de votre symbole :

set _NT_SYMBOL_PATH=c:\myapp\symbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols

Important 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.

Désactiver la mise en cache BSTR

Automation (anciennement OLE Automation) met en cache la mémoire utilisée par les chaînes BSTR. Cela peut empêcher l’UMDH de déterminer correctement le propriétaire d’une allocation de mémoire. Pour éviter ce problème, vous devez désactiver la mise en cache BSTR.

Pour désactiver la mise en cache BSTR, définissez la variable d’environnement OANOCACHE sur un (1). Ce paramètre doit être effectué avant de lancer l’application dont les allocations doivent être tracées.

Vous pouvez également désactiver la mise en cache BSTR à partir de l’application elle-même en appelant la fonction SetNoOaCache du .NET Framework. Si vous choisissez cette méthode, vous devez appeler cette fonction plus tôt, car toutes les allocations BSTR qui ont déjà été mises en cache lorsque SetNoOaCache est appelé resteront mises en cache.

Si vous devez suivre les allocations effectuées par un service, vous devez définir OANOCACHE en tant que variable d’environnement système, puis redémarrer Windows pour que ce paramètre prenne effet.

Rechercher l’ID de processus

L’UMDH identifie le processus par son identificateur de processus (PID). Vous pouvez trouver le PID de n’importe quel processus en cours d’exécution à l’aide du Gestionnaire des tâches, de la liste des tâches ou de la liste TList.