Comment configurer les symboles dans WinDbg?

j'utilise les outils de débogage pour Windows et je reçois le message d'erreur suivant lors du démarrage de WinDbg / cdb ou ntsd:

Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path.           *
* Use .symfix to have the debugger choose a symbol path.                   *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************

lors de l'exécution de commandes arbitraires, j'obtiens aussi le message d'erreur

*** ERROR: Module load completed but symbols could not be loaded for <module>.<ext>

et la suivante semble être liée:

*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
*                                                                   *
* The Symbol Path can be set by:                                    *
* using the _NT_SYMBOL_PATH environment variable.                   *
* using the -y <symbol_path> argument when starting the debugger.   *
* using .sympath and .sympath+                                      *
*********************************************************************

dans un !analyze -v j'ai aussi vu

DEFAULT_BUCKET_ID:  WRONG_SYMBOLS

et

*************************************************************************
***                                                                   ***
*** Either you specified an unqualified symbol, or your debugger      ***
*** doesn't have full symbol information. Unqualified symbol          ***
*** resolution is turned off by default. Please either specify a      ***
*** fully qualified symbol module!symbolname, or enable resolution    ***
*** of unqualified symbols by typing ".symopt- 100". Note that        ***
*** enabling unqualified symbol resolution with network symbol        ***
*** server shares in the symbol path may cause the debugger to        ***
*** appear to hang for long periods of time when an incorrect         ***
*** symbol name is typed or the network symbol server is down.        ***
***                                                                   ***
*** For some commands to work properly, your symbol path              ***
*** must point to .pdb files that have full type information.         ***
***                                                                   ***
*** Certain .pdb files (such as the public OS symbols) do not         ***
*** contain the required information. Contact the group that          ***
*** provided you with these symbols if you need this command to       ***
*** work.                                                             ***
***                                                                   ***
*************************************************************************

comment configurer WinDbg pour trouver les symboles?

Avertissement: Ceci est destiné à être un canoniques question à tous les mauvais symboles postes windbg .

30
demandé sur Cody Gray 2015-05-04 01:00:20

1 réponses

Les symboles

peuvent être installés correctement de différentes façons.

WARNING : les exemples ici utilisent \server\symbols qui est typiquement un stockage réseau qui n'est pas disponible. Adaptez-le à votre serveur local ou supprimez complètement cette partie si vous n'en avez pas. Un serveur inexistant peut causer des retards, etc.

version TLDR pour 80% des cas

Créer un nouveau dossier c:\symbols pour symboles fournis par Microsoft. Puis tapez

.symfix+ c:\symbols
.reload

(ou reload -f si nécessaire)

assurez-vous que vous avez une connexion Internet, car cela va contacter certains serveurs Microsoft et télécharger des symboles à partir de là.

dans 80+% des cas, cela pourrait déjà résoudre votre problème de symboles. Si non, lisez la suite.

fixation des symboles par des commandes

WinDbg recherchera les symboles dans l'ordre où ils apparaissent dans le chemin de symbole. Par conséquent, c'est une bonne idée de mettre vos symboles locaux d'abord, puis une certaine société de partage de réseau local et ensuite télécharger des symboles à partir de l'Internet et stocker une copie locale.

.sympath c:\mysymbols ; *** Symbols of your application, locally, flat list of PDB files
.sympath+ cache*c:\symbolcache ; *** (optional) Create a cache for everything
.sympath+ \server\symbols ; *** Symbols provided from a network share
.symfix+ c:\symbols ; *** Microsoft symbols
"1519270920 de Fixation des symboles par le menu

dans WinDbg (mais pas les équivalents en ligne de commande) vous pouvez définir un chemin de symbole par File/Symbol File Path... ou en appuyant sur Ctrl + S . Vous entrez dans la format suivant

c:\mysymbols;cache*c:\symbolcache;\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
"1519270920 de Fixation des symboles par ligne de commande

WinDbg prend également le commutateur de ligne de commande -y si vous préférez avoir des liens de bureau différents avec différentes configurations de chemin de symbole.

WinDbg -y "<symbol path>"

notez que vous avez besoin du chemin complet ici, qui est dans une forme comme

c:\mysymbols;cache*c:\symbolcache;\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

symboles de fixation par environnement variable

il y a un variable d'environnement appelée _NT_SYMBOL_PATH qui peut être un chemin de symbole. Utilisez la syntaxe suivante:

c:\mysymbols;cache*c:\symbolcache;\server\symbols;SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

notez que non seulement WinDbg évalue cette variable, mais aussi Visual Studio, Process Explorer, Process Monitor et potentiellement d'autres logiciels. Il se peut que vous éprouviez des répercussions sur le rendement en établissant cette variable d'environnement.

sauvegarder le chemin du symbole dans un espace de travail

Si vous avez un installation de symboles complexes qui comprend plusieurs chemins, se familiariser avec le concept D'espaces de travail WinDbg .

les espaces de travail vous permettent de sauvegarder le chemin du symbole pour ne pas avoir à taper toutes les commandes dans chaque session de débogage.

une fois que vous êtes satisfait de l'espace de travail, créez un lien pour WinDbg pour inclure -Q qui signifie " Supprimer l'espace de travail ennuyeux "Save?" question."

Jusqu'à présent, je suis très heureux d'avoir sauvegardé les symboles dans le cadre de l'espace de travail Base .

symboles différés

Les symboles différés

(indiqués comme tels lors d'une commande lm ) ne posent pas de problème. WinDbg les chargera au besoin. Pour les charger tous, tapez

ld*

symboles de Débogage des problèmes

si les symboles (PDB) ne fonctionnent pas comme prévu, utilisez le

!sym noisy

pour obtenir plus d'informations sur ce que WinDbg fait exactement lors de la résolution de symboles.

Quand vous avez trouvé la solution, éteindre avec

!sym quiet

pour vérifier l'exactitude des symboles individuels, vous pouvez utiliser l'outil symchk fourni avec WinDbg.

Symchk /if <exe> /s <symbol path> /av /od /pf
/if = input is a file
/s  = symbol file path
/od = all details
/av = verify
/pf = check if private symbols are available

ou obtenir ChkMatch qui est un peu plus facile à utiliser

ChkMatch -c <exe file> <pdb file>

Si vous avez de la difficulté à accéder aux symboles d'un partage réseau, assurez-vous d'avoir ouvert une session sur le partage réseau avant. AFAIR, WinDbg ne demande pas de lettres de créance.

documentation officielle

utilisez le Microsoft Symbol Server pour obtenir les fichiers de symboles de débogage (si rediriger ici mais la redirection est actuellement cassée)

chemin du symbole pour les débogueurs Windows

56
répondu Thomas Weller 2017-04-04 09:57:29