Chemins d’accès aux symboles
La bibliothèque DbgHelp utilise le chemin de recherche de symboles pour localiser les symboles de débogage (fichiers .pdb et .dbg). Le chemin de recherche peut être constitué d’un ou plusieurs éléments de chemin séparés par des points-virgules.
Spécification des chemins de recherche
Pour spécifier l’emplacement où le gestionnaire de symboles recherche les répertoires de disques pour les fichiers de symboles, appelez la fonction SymSetSearchPath. Vous pouvez également spécifier un chemin de recherche de symbole dans le paramètre UserSearchPath de la fonction SymInitialize.
Le paramètre UserSearchPath dans SymInitialize et le paramètre SearchPath dans SymSetSearchPath prendre un pointeur vers une chaîne terminée par null qui spécifie un chemin d’accès ou une série de chemins séparés par un point-virgule. Le gestionnaire de symboles utilise ces chemins d’accès pour rechercher des fichiers de symboles. Si ce paramètre est NULL, le gestionnaire de symboles recherche le répertoire contenant le module pour lequel les symboles sont recherchés. Dans le cas contraire, si ce paramètre est spécifié sous la forme d’une valeurNULL non, le gestionnaire de symboles recherche d’abord les chemins définis par l’application avant de rechercher dans le répertoire du module. Si vous définissez la variable d’environnement _NT_SYMBOL_PATH ou _NT_ALT_SYMBOL_PATH, le gestionnaire de symboles recherche les fichiers de symboles dans l’ordre suivant :
- Variable d’environnement _NT_SYMBOL_PATH.
- Variable d’environnement _NT_ALT_SYMBOL_PATH.
- Répertoire qui contient le module correspondant.
Pour récupérer les chemins de recherche, appelez la fonctionSymGetSearchPath.
Le chemin de recherche des fichiers de base de données de programme (.pdb) est différent du chemin d’accès des fichiers de débogage (.dbg). L’algorithme est déterminé par la fonctionnalité de la bibliothèque de symboles. Par défaut, Microsoft Visual C/C++ crée des symboles de format Microsoft, les supprime de l’image et les place dans un fichier .pdb distinct. En règle générale, le fichier .pdb se trouve dans le répertoire qui contient l’image exécutable. Visual C/C++ incorpore le chemin absolu du fichier .pdb dans l’image exécutable. Si le gestionnaire de symboles ne trouve pas le fichier .pdb à cet emplacement ou si le fichier .pdb a été déplacé vers un autre répertoire, le gestionnaire de symboles localisera le fichier .pdb à l’aide du chemin de recherche décrit pour les fichiers .dbg.
Types d’éléments Path
Il existe trois types d’éléments de chemin d’accès.
Standard Path, élément
Un élément de chemin d’accès standard est recherché en recherchant à la racine du répertoire spécifié par l’élément de chemin d’accès. Le gestionnaire de symboles recherche également dans un sous-répertoire de « symboles » qui correspond à l’extension de fichier du module que les symboles sont recherchés. Il s’agit généralement de « dll », « exe » ou « sys ». Enfin, il se trouve dans un sous-répertoire appelé « symboles » avec un répertoire du même nom que l’extension. Par exemple, si l’élément de chemin d’accès au symbole est « c :\mySymbols » et que le fichier que les symboles sont recherchés est «boo.dll», les répertoires suivants sont recherchés.
- c :\mySymbols
- c :\mySymbols\dll
- c :\mySymbols\symbols\dll
Le gestionnaire de symboles utilise cette logique pour rechercher tout élément de chemin d’accès qui ne répond pas aux critères pour être un serveur de symboles ou cache (décrit ci-dessous).
Symbol Server Path, élément
Un serveur de symboles élément path utilise une technologie spéciale qui peut localiser un symbole correspondant exactement au module en question. Pour plus d’informations, consultez Utilisation de SymSrv.
Le gestionnaire de symboles traite un élément de chemin d’accès comme un serveur de symboles s’il commence par le texte « srv* ».
Note
Si le texte « srv* » n’est pas spécifié, mais que l’élément de chemin d’accès réel est un magasin de serveurs de symboles, le gestionnaire de symboles agit comme si « srv* » a été spécifié. Le gestionnaire de symboles effectue cette détermination en recherchant l’existence d’un fichier appelé «pingme.txt» dans le répertoire racine du chemin spécifié.
Élément Cache Path
Un cache élément de chemin d’accès est une variante d’un élément de chemin d’accès au serveur de symboles.
Ce répertoire est recherché comme n’importe quel autre serveur de symboles. Toutefois, si le symbole n’est pas trouvé ici et qu’il se trouve dans un élément de chemin plus bas dans la chaîne du chemin de symbole, le symbole est copié et stocké dans le serveur de symboles spécifié dans cet élément.
Le gestionnaire de symboles traite un élément de chemin d’accès en tant qu’élément de cache s’il commence par le texte « cache* ». Pour spécifier un cache dans « c :\myCache », utilisez un élément de chemin d’accès de symbole de « cache*c :\myCache ».
Exemple de chemin de recherche
Pour voir comment cela fonctionne, définissez ce chemin de recherche.
cache*c:\myCache;srv*\\symbols\symbols
Voici une liste de la sortie détaillée du gestionnaire de symboles lors de la recherche de ntdll.pdb, à l’aide du chemin de recherche répertorié ci-dessus.
DBGHELP: .\ntdll.pdb - file not found
DBGHELP: .\dll\ntdll.pdb - file not found
DBGHELP: .\symbols\dll\ntdll.pdb - file not found
SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found
SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied
DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached
DBGHELP: ntdll - private symbols & lines
c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb
Les trois premières lignes de sortie montrent le gestionnaire de symboles qui traite le premier élément de chemin d’accès de .
. Il s’agit d’un élément de chemin d’accès standard.
La quatrième ligne montre le gestionnaire de symboles à l’aide du serveur de symboles pour rechercher le fichier dans le deuxième élément de chemin d’accès de cache*c:\myCache
qui est un élément de chemin d’accès au cache.
La cinquième ligne montre que le fichier se trouve dans le troisième élément de chemin d’accès de srv*\\symbols\symbols
, qui est un élément de chemin d’accès au serveur de symboles.
La sixième ligne indique que le fichier est copié dans le cache.
Les deux dernières lignes ouvertes par le fichier à partir du cache.