Partager via


Préparation à l’utilisation de l’UMDH

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

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

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

Pour activer la capture de trace de pile pour un processus, utilisez GFlags pour définir l’indicateur de base de données de trace de pile en mode utilisateur pour le processus. Pour ce faire, vous pouvez effectuer 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 tabulation, 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 /i ImageName +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 tabulation, cochez la case Retour de pile (Megs), tapez une valeur (en Mo) dans la zone de texte associée, puis sélectionnez Appliquer.

Notez que augmentez cette base de données uniquement si nécessaire, car elle 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. Elle 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 d’accès aux symboles.

Par exemple, si les symboles de votre application se trouvent sur 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 votre chemin d’accès aux symboles :

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

Par 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, à l’aide de C :\MyCache comme magasin en aval, vous devez utiliser la commande suivante pour définir votre chemin d’accès aux symboles :

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

Important Supposons que vous disposez de 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 d’accès 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é effectué. Ne pointez pas le chemin du symbole sur l’ordinateur d’analyse vers un serveur de symboles. Si vous le faites, UMDH récupère des symboles pour la version de Windows qui s’exécute 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 une (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 tôt, car toutes les allocations BSTR qui ont déjà été mises en cache lorsque SetNoOaCache est appelé restent 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

UMDH identifie le processus par son identificateur de processus (PID). Vous trouverez 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 de tâches.