Prise en charge des symboles
Lorsque Windows Analyseur de performances (WPA) est correctement configuré, WPA affiche les noms symboliques des fichiers de symboles pour les adresses trouvées dans l’enregistrement.
Pour décoder les symboles, les outils doivent localiser les fichiers de base de données du programme, appelés fichiers de base de données de programme (PDB) ou fichiers de symboles, pour générer des piles d’appels complètes. Le compilateur et l’éditeur de liens génèrent des fichiers PDB lorsque le système génère un composant. Microsoft fournit les fichiers de base de données du programme pour de nombreux produits Microsoft dans un serveur de symboles en ligne. Les outils de débogage Microsoft pour Windows et WPA utilisent le serveur de symboles en ligne pour rechercher des informations sur les symboles. Par conséquent, l’ordinateur doit être connecté à Internet si les fichiers de symboles ne sont pas copiés localement. Windows Performance Toolkit utilise la même infrastructure de décodage de symboles que le débogueur Windows, Windbg.exe. Pour plus d’informations, consultez WinDbg.
Pour configurer la prise en charge des symboles, vous devez définir la variable d’environnement _NT_SYMBOL_PATH . L’exemple suivant définit le chemin des symboles pour utiliser le serveur de symboles publics Microsoft avec un magasin en aval dans C:\symbols :
set _NT_SYMBOL_PATH= srv*C:\symbols*https://msdl.microsoft.com/downloads/symbols
Notez que cet exemple est une seule ligne de commande.
L’URL de ce chemin de symbole spécifie le serveur de symboles Microsoft en ligne. Le chemin entre les astérisque (symboles C:\) spécifie le magasin en aval. Il s’agit d’un cache local dans lequel le système de résolution de symboles conserve les fichiers de symboles. Les outils WPA décodent également les symboles des composants que vous développez. Ajoutez un ou plusieurs chemins d’accès à _NT_SYMBOL_PATH qui contiennent les fichiers PDB pour les composants que vous souhaitez enregistrer. Par exemple, l’exemple suivant montre comment le chemin a été configuré pour l’exemple précédent :
set _NT_SYMBOL_PATH=c:\coding\fs\release;srv*C:\symbols*
Lorsque Xperf ou WPA décode des symboles, Xperf ou WPA met en cache une version condensée des fichiers de symboles d’origine, ou PDB, sur le disque dans le répertoire \symcache . Pour ce faire, Xperf ou WPA utilise les symboles disponibles à l’époque. Les symboles du système d’exploitation disponibles en dehors de Microsoft sont des symboles publics. Ces symboles contiennent moins d’informations que les symboles privés internes. Dans les tests de boîte noire, les symboles publics peuvent également inclure des informations incorrectes. Les symboles privés, qui sont plus fiables, peuvent être obtenus en vertu d’accords de non-divulgation. Si un utilisateur a décodé un enregistrement à l’aide de symboles publics et que l’utilisateur obtient ensuite des symboles privés, l’utilisateur doit effacer le répertoire \symcache avant que Xperf ou WPA puisse découvrir les nouveaux symboles privés.
Résolution des problèmes liés au décodage de symboles
La prise en charge du décodage de symboles est complexe. Les conditions suivantes doivent être remplies :
Vous devez spécifier
-symbols
dans la ligne de commande Xperf ou sélectionner Charger des symboles dans le menu Trace dans WPA après avoir ouvert un enregistrement.Les variables d’environnement doivent être configurées correctement. Pour plus d’informations sur Xperf, consultez symboles.
Le fichier d’enregistrement du noyau ETW doit avoir été arrêté et fusionné correctement. Pour plus d’informations, consultez Arrêt d’un enregistrement.
L’enregistreur de performances Windows (WPR) ou WPA fusionne le fichier d’enregistrement utilisateur ETW avec un fichier d’enregistrement du noyau qui est pris en même temps sur le même ordinateur.
Vous devez avoir accès aux sources binaires et de symboles que _NT_SYMBOL_PATH spécifie. Si vous utilisez un serveur de symboles, le serveur de symboles n’est souvent qu’un redirecteur. Dans ce cas, vous devez avoir accès au serveur de symboles et aux sites vers lesquels pointe le serveur de symboles qui hébergent les fichiers binaires et les symboles.
_NT_SYMBOL_PATH devez pointer vers les fichiers corrects. Si les fichiers existent à partir d’une autre build ou architecture, les fichiers ne fonctionnent pas. Si la version des fichiers binaires d’application n’est pas la même version que les symboles vers lesquels pointe _NT_SYMBOL_PATH , vous ne pouvez pas afficher les piles d’appels.
Pour exclure une incompatibilité de symboles, utilisez Symchk.exe de la distribution Outils de débogage pour Windows pour vous assurer que les symboles correspondent aux fichiers de symboles sur l’ordinateur sur lequel l’enregistrement a été effectué. Par exemple :
symchk /v <local_file> /s <sympath_to_name.pdb>
Pour exclure une incompatibilité binaire, utilisez la
fc /b
commande pour vous assurer que les fichiers binaires sur l’ordinateur sur lequel l’enregistrement a été effectué correspondent aux fichiers binaires sur le partage de suppression. Par exemple :fc /b <local_file> <drop_share_file>
Dans Xperf, vous devez capturer l’enregistrement du noyau ETW en utilisant au moins les
PROC_THREAD+LOADER
indicateurs. Ces indicateurs fournissent des informations de base sur la durée de vie du processus et les plages d’adresses virtuelles d’images dans la mémoire de processus. Ces informations permettent à XPerf de décoder des adresses virtuelles en images et symboles.Pour vérifier que ces indicateurs ont été activés dans l’enregistrement du noyau ETW, case activée que les événements Xperf -process (Create, Delete, Start Rundown, End Rundown) et les événements Image (Load, Unload, Start Rundown, End Rundown) sont présents dans la table générée à l’aide de la commande suivante :
xperf -i kernel.etl -a tracestats -detail
Note Tous ces événements peuvent ne pas être répertoriés dans le tableau, selon que ces événements se sont produits ou non.
Limitation dans le décodage de symboles Xperf
Xperf utilise par défaut le lecteur système si un lecteur n’est pas spécifié pour une image exécutable (par exemple ,\Path\Library.dll). Lorsque vous exécutez la -d/-merge
commande, si Xperf ne trouve pas d’image exécutable qui existait dans un processus en cours d’exécution pendant l’enregistrement, Xperf ne peut pas récupérer les informations d’identité du fichier d’image et de symbole correspondants et ajouter les informations à l’enregistrement fusionné. Sans ces informations, Xperf ne peut pas effectuer de décodage de symboles pour cette image dans cet enregistrement.
Ce problème n’affecte pas les autres chemins d’accès aux fichiers, tels que les chemins d’accès dans les E/S disque ou les E/S de fichier.
Pour activer le décodage des symboles et permettre le chargement et le déchargement corrects des chemins d’accès d’images dans les enregistrements Xperf ETW, vous devez stocker toutes les images exécutables pour lesquelles vous pouvez avoir besoin d’un décodage de symboles ou d’un chargement d’images et décharger les chemins d’accès sur le lecteur système. Ensuite, exécutez les images de ce lecteur. Si ce n’est pas possible, créez une miroir des images sur le lecteur système, même si vous exécutez les images à partir d’un autre lecteur. Par exemple, si C: est votre lecteur système, créez une copie identique de D:\game\bin\binkw32.dll à C:\game\bin\binkw32.dll.
Rubriques connexes
Utilisation de la prise en charge de la base de données NGEN CLR 4.0