Partager via


Utilisation de SymChk

La syntaxe de base pour SymChk est la suivante :

symchk [/r] FileNames /s SymbolPath 

FileNames spécifie un ou plusieurs fichiers programme dont les symboles sont nécessaires. Si FileNames est un répertoire et que l’indicateur /r est utilisé, ce répertoire est exploré de manière récursive et SymChk essaiera de trouver des symboles pour tous les fichiers programme dans cette arborescence de répertoires. SymbolPath spécifie où SymChk doit rechercher des symboles.

Il existe de nombreuses autres options de ligne de commande. Pour obtenir une liste complète, consultez SymChk Command-Line Options.

Obtention de symchk

Symchk, comme d’autres outils de débogage, est fourni dans le cadre du débogueur. Pour plus d'informations, consultez Outils de débogage pour Windows.

Une fois les outils de débogage installés, symchk est disponible dans ce répertoire pour Windows 64 bits.

C :\Program Files (x86)\Windows Kits\10\Débogueurs\x64

Exemple d’utilisation

Le chemin de symbole spécifié peut inclure n’importe quel nombre de répertoires locaux, de répertoires UNC ou de serveurs de symboles. Les répertoires locaux et les répertoires UNC ne font pas l’objet d’une recherche récursive. Seuls le répertoire spécifié et un sous-répertoire basé sur l’extension de l’exécutable font l’objet d’une recherche. Par exemple, la requête

symchk thisdriver.sys /s G:\symbols 

recherche G :\mysymbols et G :\mysymbols\sys.

Vous pouvez spécifier un serveur de symboles à l’aide de l’une des syntaxes suivantes dans le chemin de votre symbole :

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

Cela est très similaire à l’utilisation d’un serveur de symboles dans le chemin des symboles du débogueur. Pour plus d’informations à ce sujet, consultez Utilisation de serveurs de symboles et de magasins de symboles.

Si un magasin en aval est spécifié, SymChk effectue des copies de tous les fichiers de symboles valides trouvés par le serveur de symboles et les place dans le magasin en aval. Seuls les fichiers de symboles qui sont des correspondances complètes sont copiés en aval.

SymChk recherche toujours le magasin en aval avant d’interroger le serveur de symboles. Par conséquent, vous devez faire attention à l’utilisation d’un magasin en aval lorsque quelqu’un d’autre conserve le magasin de symboles. Si vous exécutez SymChk une fois et qu’il trouve des fichiers de symboles, il les copiera dans le magasin en aval. Si vous réexécutez Ensuite SymChk après que ces fichiers ont été modifiés ou supprimés sur le magasin de symboles, SymChk ne remarquera pas ce fait, car il trouvera ce qu’il recherche dans le magasin en aval et ne cherchera pas plus loin.

Note SymChk utilise toujours SymSrv (Symsrv.dll) comme DLL de serveur de symboles. D’autre part, les débogueurs peuvent choisir une DLL de serveur de symboles autre que SymSrv si une dll est disponible. (SymSrv est le serveur de symboles inclus dans le package Outils de débogage pour Windows.)

Utilisation de SymChk pour déterminer si les symboles sont privés ou publics

Pour déterminer si un fichier de symboles est privé ou public, utilisez le paramètre /v afin que SymChk affiche une sortie détaillée. Supposons que MyApp.exe et MyApp.pdb se trouvent dans le dossier c :\sym. Entrez cette commande.

symchk /v C:\sym\MyApp.exe /s C:\sym**

Si MyApp.pdb contient des symboles privés, la sortie de SymChk ressemble à ceci.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - private symbols & lines
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Si MyApp.pdb contient uniquement des symboles publics, la sortie de SymChk ressemble à ceci.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - public symbols
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Pour limiter votre recherche afin qu’elle ne trouve que les fichiers de symboles publics, utilisez l’option s avec le paramètre /s(/ss). La commande suivante trouve une correspondance si MyApp.pdb contient uniquement des symboles publics. Il ne trouve pas de correspondance si MyApp.pdb contient des symboles privés.

symchk /v C:\sym\MyApp.exe /s C:\sym

Pour plus d’informations, consultez Symboles publics et privés.

Exemples

Voici quelques exemples. La commande suivante recherche les symboles du Myapp.exe du programme :

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\applications 

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

Vous pouvez réessayer avec un autre chemin de symbole :

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

La recherche a réussi cette fois. Si l’option détaillée n’est pas utilisée, SymChk répertorie uniquement les fichiers pour lesquels il n’a pas trouvé de symboles. Par conséquent, dans cet exemple, aucun fichier n’a été répertorié. Vous pouvez indiquer que la recherche a réussi, car il y a maintenant un fichier répertorié dans la catégorie « passé » et aucun dans la catégorie « échec ».

Un fichier programme est ignoré s’il ne contient aucun code exécutable. De nombreux fichiers de ressources sont de ce type.

Si vous préférez voir les noms de fichiers de tous les fichiers programme, vous pouvez utiliser l’option /v pour générer une sortie détaillée :

E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: MyApp.exe           PASSED

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

La commande suivante recherche un grand nombre de symboles Windows dans un serveur de symboles. Il existe une grande variété de messages d’erreur possibles :

E:\debuggers> symchk /r C:\windows\system32 /s srv*\\manysymbols\windows 

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

Voir aussi

SymChk Command-Line Options

Utilisation de serveurs de symboles et de magasins de symboles