Utilisation avancée de SymSrv
SymSrv peut fournir des fichiers de symboles à partir d’un magasin de symboles centralisé. Ce magasin peut contenir n’importe quel nombre de fichiers de symboles, correspondant à un nombre quelconque 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 réel et les fichiers binaires, ou il peut simplement contenir des pointeurs vers des fichiers de symboles. Si le magasin contient des pointeurs, SymSrv récupère les fichiers réels directement à partir de leurs sources.
SymSrv peut également être utilisé pour séparer un magasin de symboles volumineux dans un sous-ensemble plus petit qui convient à une tâche de débogage spécialisée.
Enfin, SymSrv peut obtenir des fichiers de symboles à partir d’une source HTTP ou HTTPS à l’aide des informations d’ouverture de session fournies par le système d’exploitation. SymSrv prend en charge les sites HTTPS protégés par des cartes à puce, des certificats et des connexions et mots de passe réguliers. Pour plus d’informations, consultez magasins de symboles HTTP.
Définition du chemin d’accès aux symboles
Pour utiliser ce serveur de symboles, symsrv.dll devez être installé dans le même répertoire que le débogueur. Le chemin d’accès aux symboles 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
Ce 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, cela sera toujours symsrv.dll.
srv
Il s’agit d’un raccourci pour symsrv*symsrv.dll.
AvalStore
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 les magasins en cascade plus bas sur cette page.
Si vous incluez deux astérisques dans une ligne où un magasin en aval serait 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. Le répertoire de base est défini par défaut sur 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.
Notez que si vous accédez à des 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 distants.
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 est copié dans un sous-répertoire de l’arborescence sous AvalStore , qui correspond à son emplacement dans l’arborescence sous \\Server\Share.
Le serveur de symboles n’a pas besoin d’être la seule entrée dans le chemin d’accès aux symboles. Si le chemin de symbole se compose de plusieurs entrées, le débogueur vérifie chaque entrée pour les fichiers de symboles nécessaires, dans l’ordre (de gauche à droite), que ce soit un serveur de symboles ou un répertoire réel.
Voici quelques exemples. Pour utiliser SymSrv comme serveur de symboles avec un magasin de symboles sur \\mybuilds\mysymbols, définissez le chemin d’accès 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 à partir 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 de 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 comme suit :
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 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 vérifie uniquement les paramètres exacts. Toutefois, le débogueur peut trouver un fichier de symboles incompatible avec le nom correct, à l’aide du 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 Magasin en aval en tant que 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 Windows différentes. Si vous mettez à niveau la version de Windows utilisée sur votre ordinateur cible, les fichiers de symboles mis en cache correspondent tous à la version antérieure. Ces fichiers mis en cache ne seront plus utilisés, ce qui peut être un bon moment pour supprimer le cache.
Magasins en cascade en aval
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 éloigné 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 de symbole qui utilise deux magasins en aval pour contenir des informations du magasin de symboles principal accessible. Il peut s’agir du magasin maître, 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 examine d’abord c :\localcache pour un fichier de symboles. S’il y est trouvé, il retourne un chemin d’accès à celui-ci. S’il n’y est pas trouvé, il recherche dans \\interim\store. Si le fichier de symboles se trouve ici, SymSrv le copie dans c :\localcache et retourne le chemin d’accès. S’il n’y est pas trouvé, SymSrv recherche dans le magasin de symboles publics Microsoft à l’adresse https://msdl.microsoft.com/download/symbols; si le fichier est trouvé là, SymSrv le copie à la fois dans \\interim\store et c :\localcache.
Un comportement similaire est obtenu à l’aide du chemin suivant :
srv**\\interim\store*https://internetsite
Dans ce cas, le cache local est le magasin en aval par défaut et le magasin maître 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 contenant des magasins en cascade, il ignore tout magasin dans lequel il ne peut pas lire ou écrire. Par conséquent, si un partage tombe en panne, il copie le fichier dans le magasin en aval à partir du magasin manquant sans aucune erreur. Un bon effet secondaire de cette erreur est que l’utilisateur peut spécifier plusieurs magasins maîtres qui alimentent un seul flux de magasins en aval tant que les magasins maîtres ne sont pas accessibles en écriture.
Lorsqu’un fichier de symboles compressé est récupéré à partir du magasin maître, 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 dans le chemin d’accès.
Utilisation des chemins du serveur de symboles HTTP et SMB
Comme indiqué précédemment, le chaînage (ou la 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. Sur chaque absence, le serveur de symboles suivant (en amont) est interrogé, jusqu’à ce que le fichier soit trouvé.
S’il est trouvé, le fichier est copié du serveur de symboles (en amont) vers le serveur de symboles précédent (en aval). Cela est répété 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 soit 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 doit se trouver à la fin du chemin (car il ne peut pas être écrit pour servir de cache). Si un magasin de symboles BASÉ sur HTTP était situé au milieu ou à gauche de la liste de magasins, il n’est pas possible de copier les fichiers trouvés dans celui-ci et la chaîne est rompue. 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 uniquement dans la liste. Si SymSrv est jamais 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 de symbole ou non.
HTTP n’est pris en charge que 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 unique commun implique un bureau central hébergeant tous les fichiers (\\MainOffice\Symbols), les succursales mettant en cache un sous-ensemble (\\BranchOfficeA\Symbols) et des bureaux (C :\Symbols) en 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 (en amont), la lecture est requise.
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 symboles de partage HTTP et SMB multiples
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 parcourue. Si les symboles ne se trouvent pas dans la première chaîne, la deuxième chaîne est parcourue et si les symboles se trouvent dans la deuxième chaîne, ils sont mis en cache à l’emplacement spécifié. Cette approche permet à un serveur de symboles principal d’être utilisé normalement, avec un serveur secondaire 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 cache*localsymbolcache
chaîne dans le chemin de votre symbole. Ce n’est pas une partie de l’élément serveur de symboles, mais un élément distinct dans votre chemin de symbole. Le débogueur utilise le répertoire spécifié localsymbolcache pour stocker tous les symboles chargés à partir d’un é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 non seulement ceux téléchargés par un serveur de symboles.
Par exemple, le chemin d’accès de symbole suivant ne met pas en cache les symboles pris à partir de \\someshare. Il utilise 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 publics Microsoft, en raison de la syntaxe habituelle utilisée par le serveur de symboles (srv avec deux astérisques ou plus). De plus, si vous utilisez par la suite la commande .sympath+ pour ajouter des emplacements supplémentaires à ce chemin, ces nouveaux éléments seront également mis en cache, car ils seront ajoutés à droite 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 obtenu est recherché pour le fichier de symboles ou un fichier de pointeur de magasin de symboles.
Si cette recherche réussit, SymbolServer transmet le chemin d’accès à l’appelant et retourne TRUE. Si le fichier est introuvable, SymbolServer retourne FALSE.
Utilisation de AgeStore pour réduire la taille du cache
L’outil AgeStore peut être utilisé pour supprimer des fichiers mis en cache antérieurs à une date spécifiée, ou pour réduire le contenu du cache sous une taille spécifiée. Cela peut être utile si votre magasin en aval est trop volumineux. Pour plus d’informations, consultez AgeStore.