Partager via


Utilisation avancée de SymSrv

SymSrv peut remettre des fichiers de symboles à partir d’un magasin de symboles centralisé. Ce magasin peut contenir n’importe quel nombre de fichiers de symboles, correspondant à n’importe quel nombre de programmes ou de systèmes d’exploitation. Le magasin peut également contenir des fichiers binaires (cela est utile lors du débogage de minidumps).

Le magasin peut contenir le symbole et les fichiers binaires réels, ou il peut simplement contenir des pointeurs vers des fichiers de symboles. Si le magasin contient des pointeurs, SymSrv récupère les fichiers proprement dits directement à partir de leurs sources.

SymSrv peut également être utilisé pour séparer un grand magasin de symboles en un sous-ensemble plus petit approprié pour une tâche de débogage spécialisée.

Pour finir, SymSrv peut obtenir des fichiers de symboles à partir d’une source HTTP ou HTTPS à l’aide des informations de connexion fournies par le système d’exploitation. SymSrv prend en charge les sites HTTPS protégés par des cartes à puce, des certificats, ainsi que des connexions et des mots de passe ordinaires. Pour plus d’informations, consultez Magasins de symboles HTTP.

Définition du chemin du symbole

Pour utiliser ce serveur de symboles, symsrv.dll doivent être installés dans le même répertoire que le débogueur. Le chemin du symbole peut être défini comme indiqué dans ce code :

set _NT_SYMBOL_PATH = symsrv*ServerDLL*DownstreamStore*\\Server\Share

set _NT_SYMBOL_PATH = symsrv*ServerDLL*\\Server\Share

set _NT_SYMBOL_PATH = srv*DownstreamStore*\\Server\Share

set _NT_SYMBOL_PATH = srv*\\Server\Share

Les parties de cette syntaxe sont expliquées comme suit :

symsrv
Cette mot clé doit toujours apparaître en premier. Il indique au débogueur que cet élément est un serveur de symboles, pas seulement un répertoire de symboles normal.

ServerDLL
Spécifie le nom de la DLL du serveur de symboles. Si vous utilisez le serveur de symboles SymSrv, ce sera toujours symsrv.dll.

Srv
Il s’agit de l’abréviation de symsrv*symsrv.dll.

DownstreamStore
Spécifie le magasin en aval. Il s’agit d’un répertoire local ou d’un partage réseau qui sera utilisé pour mettre en cache des fichiers de symboles individuels.

Vous pouvez spécifier plusieurs magasins en aval, séparés par des astérisques. Plusieurs magasins en aval sont expliqués dans Magasins en aval en cascade plus bas sur cette page.

Si vous incluez deux astérisques dans une ligne où un magasin en aval est normalement spécifié, le magasin en aval par défaut est utilisé. Ce magasin se trouve dans le sous-répertoire sym du répertoire de base. Par défaut, le répertoire de base est le répertoire d’installation du débogueur ; Cela peut être modifié à l’aide de l’extension !homedir ou en définissant la variable d’environnement DBGHELP_HOMEDIR.

Si DownstreamStore spécifie un répertoire qui n’existe pas, SymStore tente de le créer.

Si le paramètre DownstreamStore est omis et qu’aucun astérisque supplémentaire n’est inclus (en d’autres termes, si vous utilisez srv avec exactement un astérisque ou symsrv avec exactement deux astérisques), aucun magasin en aval n’est créé. Le débogueur charge tous les fichiers de symboles directement à partir du serveur, sans les mettre en cache localement.

Note Si vous accédez aux symboles à partir d’un site HTTP ou HTTPS, ou si le magasin de symboles utilise des fichiers compressés, un magasin en aval est toujours utilisé. Si aucun magasin en aval n’est spécifié, un magasin est créé dans le sous-répertoire sym du répertoire de base.

\\Server\Share
Spécifie le serveur et le partage du magasin de symboles distant.

Si un magasin en aval est utilisé, le débogueur recherche d’abord un fichier de symboles dans ce magasin. Si le fichier de symboles est introuvable, le débogueur recherche le fichier de symboles à partir du serveur et du partage spécifiés, puis met en cache une copie de ce fichier dans le magasin en aval. Le fichier sera copié dans un sous-répertoire de l’arborescence sous DownstreamStore qui correspond à son emplacement dans l’arborescence sous \\Server\Share.

Le serveur de symboles ne doit pas être la seule entrée dans le chemin d’accès aux symboles. Si le chemin du symbole se compose de plusieurs entrées, le débogueur recherche les fichiers de symboles nécessaires à chaque entrée, dans l’ordre (de gauche à droite), qu’un serveur de symboles ou un répertoire réel soit nommé.

Voici quelques exemples. Pour utiliser SymSrv comme serveur de symboles avec un magasin de symboles sur \\mybuilds\mysymbols, définissez le chemin de symbole suivant :

set _NT_SYMBOL_PATH= symsrv*symsrv.dll*\\mybuilds\mysymbols

Pour définir le chemin du symbole afin que le débogueur copie les fichiers de symboles d’un magasin de symboles sur \\mybuilds\mysymbols dans votre répertoire local c:\localsymbols, utilisez :

set _NT_SYMBOL_PATH=symsrv*symsrv.dll*c:\localsymbols*\\mybuilds\mysymbols

Pour définir le chemin du symbole afin que le débogueur copie les fichiers de symboles du site https://www.company.com/manysymbols HTTPS vers un répertoire réseau local \\localserver\myshare\mycache, utilisez :

set _NT_SYMBOL_PATH=symsrv*symsrv.dll*\\localserver\myshare\mycache*https://www.company.com/manysymbols

Ce dernier exemple peut également être raccourci en tant que tel :

set _NT_SYMBOL_PATH=srv*\\localserver\myshare\mycache*https://www.company.com/manysymbols

En outre, le chemin d’accès aux symboles peut contenir plusieurs répertoires ou serveurs de symboles, séparés par des points-virgules. Cela vous permet de localiser des symboles à partir de plusieurs emplacements (ou même de plusieurs serveurs de symboles). Si un fichier binaire a un fichier de symboles incompatible, le débogueur ne peut pas le localiser à l’aide du serveur de symboles, car il recherche uniquement les paramètres exacts. Toutefois, le débogueur peut trouver un fichier de symboles incompatible avec le nom correct, en utilisant le chemin de symbole traditionnel, et le charger correctement. Même si le fichier n’est techniquement pas le fichier de symboles correct, il peut fournir des informations utiles.

Suppression du cache

Si vous utilisez un DownstreamStore comme cache, vous pouvez supprimer ce répertoire à tout moment pour économiser de l’espace disque.

Il est possible d’avoir un vaste magasin de symboles qui inclut des fichiers de symboles pour de nombreux programmes ou versions de Windows différents. Si vous mettez à niveau la version de Windows utilisée sur votre ordinateur cible, les fichiers de symboles mis en cache correspondront tous à la version antérieure. Ces fichiers mis en cache ne seront plus utile, et cela peut être un bon moment pour supprimer le cache.

Magasins en aval en cascade

Vous pouvez spécifier n’importe quel nombre de magasins en aval, séparés par des astérisques. Ces magasins sont appelés magasins de symboles en cascade.

Après l’initial srv* ou symsrv*ServerDLL*, chaque jeton suivant représente un emplacement de symbole. Le jeton le plus à gauche est vérifié en premier. Un jeton vide, indiqué par deux astérisques dans une ligne ou par un astérisque à la fin de la chaîne, représente le magasin en aval par défaut.

Voici un exemple de chemin d’accès aux symboles qui utilise deux magasins en aval pour contenir les informations de la main magasin de symboles accessible. Il peut s’agir du magasin master, du magasin de niveau intermédiaire et du cache local :

srv*c:\localcache*\\interim\store*https://msdl.microsoft.com/download/symbols

Dans ce scénario, SymSrv recherche d’abord dans c :\localcache un fichier de symboles. S’il y est trouvé, il y retourne un chemin d’accès. S’il n’y figure pas, il s’affiche dans \\interim\store. Si le fichier de symboles s’y trouve, SymSrv le copie dans c :\localcache et retourne le chemin d’accès. S’il n’y figure pas, SymSrv recherche dans le magasin de symboles public Microsoft à l’adresse https://msdl.microsoft.com/download/symbols; si le fichier y est trouvé, SymSrv le copie dans \\interim\store et c :\localcache.

Un comportement similaire serait obtenu à l’aide du chemin d’accès suivant :

srv**\\interim\store*https://internetsite

Dans ce cas, le cache local est le magasin en aval par défaut et le magasin master est un site Internet. Un magasin de niveau intermédiaire de \\interim\store a été spécifié pour une utilisation entre les deux autres.

Lorsque SymSrv traite un chemin d’accès qui contient des magasins en cascade, il ignore tout magasin dans lequel il ne peut ni lire ni écrire. Par conséquent, si un partage tombe en panne, il copie le fichier dans le magasin en aval à partir du magasin manquant sans erreur. Un effet secondaire intéressant de cette erreur est que l’utilisateur peut spécifier plusieurs magasins master qui alimente un seul flux de magasins en aval tant que les magasins master ne sont pas accessibles en écriture.

Lorsqu’un fichier de symboles compressé est récupéré à partir du magasin master, il est stocké sous forme compressée dans n’importe quel magasin de niveau intermédiaire. Le fichier sera décompressé dans le magasin le plus bas du chemin d’accès.

Utilisation des chemins de serveur de symboles HTTP et SMB

Comme indiqué précédemment, le chaînage (ou en cascade) fait référence à la copie qui se produit entre chaque séparateur « * » dans le chemin du symbole. Les symboles sont recherchés dans un ordre de gauche à droite. À chaque échec, le serveur de symboles (amont) suivant est interrogé, jusqu’à ce que le fichier soit trouvé.

S’il est trouvé, le fichier est copié du serveur de symboles (amont) vers le serveur de symboles précédent (en aval). Cette opération est répétée pour chaque serveur de symboles (en aval). De cette façon, les serveurs de symboles en aval (partagés) sont remplis avec les efforts collectifs de tous les clients utilisant les serveurs de symboles.

Même si les chemins UNC chaînés peuvent être utilisés sans le préfixe SRV*, nous vous recommandons de spécifier SRV* afin que la gestion avancée des erreurs de symsrv.dll être utilisée.

Lorsque vous incluez un serveur de symboles HTTP dans le chemin d’accès, un seul peut être spécifié (par chaîne), et il doit être à la fin du chemin d’accès (car il ne peut pas être écrit pour servir de cache). Si un magasin de symboles HTTP se trouvait au milieu ou à gauche de la liste des magasins, il ne serait pas possible de copier les fichiers trouvés dans celui-ci et la chaîne serait interrompue. En outre, étant donné que le gestionnaire de symboles ne peut pas ouvrir un fichier à partir d’un site web, un magasin HTTP ne doit pas être le magasin le plus à gauche ou l’unique magasin dans la liste. Si SymSrv est présenté avec ce chemin de symbole, il tente de récupérer en copiant le fichier dans le magasin en aval par défaut et de l’ouvrir à partir de là, que le magasin en aval par défaut soit indiqué dans le chemin du symbole ou non.

HTTP est uniquement pris en charge lors de l’utilisation du préfixe SRV* (implémenté par le gestionnaire de symboles symsrv.dll).

Exemples de scénarios de serveur de symboles de partage HTTP et SMB

Un déploiement UNC uniquement courant implique un bureau central hébergeant tous les fichiers (\\MainOffice\Symbols), des succursales mettant en cache un sous-ensemble (\\BranchOfficeA\Symbols) et des bureaux (C :\Symbols) mettant en cache les fichiers qu’ils référencent.

srv*C:\Symbols*\\BranchOfficeA\Symbols*\\MainOffice\Symbols

Lorsque le partage SMB est le magasin de symboles principal (amont), la lecture est obligatoire.

srv*C:\Symbols*\\MachineName\Symbols

Lorsque le partage SMB est un magasin de symboles intermédiaire (en aval), la lecture/modification est requise. Le client copie le fichier du magasin de symboles principal vers le partage SMB, puis du partage SMB vers le dossier local.

srv*C:\Symbols*\\MachineName\Symbols*https://msdl.microsoft.com/download/symbols
srv*C:\Symbols*\\MachineName\Symbols*\\MainOffice\Symbols

Lorsque le partage SMB est un magasin de symboles intermédiaire (en aval) dans un déploiement SymProxy, seule la lecture est requise. Le filtre ISAPI SymProxy effectue les écritures, et non le client.

srv*C:\Symbols*\\MachineName\Symbols*https://SymProxyName/Symbols

Scénarios de cache de serveur de plusieurs symboles de partage HTTP et SMB

Il est possible de spécifier plusieurs chaînes de serveurs de symboles et d’emplacements de cache, séparés par un point-virgule « ; ». Si les symboles se trouvent dans la première chaîne, la deuxième chaîne n’est pas traversée. Si les symboles ne se trouvent pas dans la première chaîne, la deuxième chaîne est traversée et, si les symboles se trouvent dans la deuxième chaîne, ils sont mis en cache à l’emplacement spécifié. Cette approche permet d’utiliser normalement un serveur de symboles principal, un serveur secondaire étant utilisé uniquement si les symboles ne sont pas disponibles sur le serveur de symboles principal spécifié dans la première chaîne.

srv*C:\Symbols*\\Machine1\Symbols*https://SymProxyName/Symbols;srv*C:\WebSymbols*https://msdl.microsoft.com/download/symbols

cache*localsymbolcache

Une autre façon de créer un cache local de symboles consiste à utiliser la chaîne dans le cache*localsymbolcache chemin de votre symbole. Cela ne fait pas partie de l’élément serveur de symboles, mais un élément distinct dans le chemin de votre symbole. Le débogueur utilise le répertoire spécifié localsymbolcache pour stocker les symboles chargés à partir de n’importe quel élément qui apparaît dans votre chemin de symbole à droite de cette chaîne. Cela vous permet d’utiliser un cache local pour les symboles téléchargés à partir de n’importe quel emplacement, et pas seulement ceux téléchargés par un serveur de symboles.

Par exemple, le chemin de symbole suivant ne met pas en cache les symboles pris à partir de \\someshare. Il utilisera c :\mysymbols pour mettre en cache les symboles extraits de \\anothershare, car l’élément commençant par \\anothershare apparaît à droite de l’élément cache*c :\mysymbols . Il utilise également c :\mysymbols pour mettre en cache les symboles extraits du magasin de symboles public Microsoft, en raison de la syntaxe habituelle utilisée par le serveur de symboles (srv avec deux astérisques ou plus). En outre, si vous utilisez par la suite la commande .sympath+ pour ajouter des emplacements supplémentaires à ce chemin d’accès, ces nouveaux éléments seront également mis en cache, car ils seront ajoutés au côté droit du chemin.

_NT_SYMBOL_PATH=\\someshare\that\cachestar\ignores;srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached

Comment SymSrv localise les fichiers

SymSrv crée un chemin UNC complet vers le fichier de symboles souhaité. Ce chemin commence par le chemin d’accès au magasin de symboles enregistré dans la variable d’environnement _NT_SYMBOL_PATH. La routine SymbolServer est ensuite utilisée pour identifier le nom du fichier souhaité ; ce nom est ajouté au chemin d’accès en tant que nom de répertoire. Un autre nom de répertoire, constitué de la concaténation de l’id, deux et trois paramètres passés à SymbolServer, est ensuite ajouté. Si l’une de ces valeurs est égale à zéro, elles sont omises.

Le répertoire résultant est recherché pour le fichier de symboles ou un fichier de pointeurs de magasin de symboles.

Si cette recherche réussit, SymbolServer transmet le chemin à l’appelant et retourne TRUE. Si le fichier est introuvable, SymbolServer retourne FALSE.

Utilisation d’AgeStore pour réduire la taille du cache

L’outil AgeStore peut être utilisé pour supprimer les fichiers mis en cache antérieurs à une date spécifiée, ou pour réduire le contenu du cache en dessous d’une taille spécifiée. Cela peut être utile si votre magasin en aval est trop grand. Pour plus d’informations, consultez AgeStore.