Partager via


Chargement de symboles

Le gestionnaire de symboles charge les symboles lorsque vous appelez la fonction SymInitialize avec le paramètre fInvadeProcess défini sur TRUE ou lorsque vous appelez la fonction SymLoadModuleEx pour spécifier un module. Dans les deux cas, le gestionnaire de symboles charge les symboles ou reporte le chargement des symboles jusqu’à ce que les symboles soient demandés, selon les options définies par la fonction SymSetOptions.

Le gestionnaire de symboles peut être utilisé pour récupérer des informations symboliques pour n’importe quel module ; il n’est pas nécessaire d’être associé à un processus spécifié dans l’appel SymInitialize. Pour utiliser un module arbitraire, spécifiez le chemin d’accès complet à l’image de module dans le paramètre ImageName. Vous pouvez utiliser un chemin d’accès à n’importe quel module exécutable disposant d’informations de débogage (.exe, .dll, .drv, .sys, .scr, .cplou .com). Utilisez le paramètre BaseOfDll pour spécifier n’importe quelle adresse de chargement, puis les adresses de symboles sont basées à partir de cette adresse.

Il n’est peut-être pas nécessaire de conserver un module de symbole chargé pendant la durée d’une application. Pour libérer le module de symboles de la liste des modules du gestionnaire de symboles, utilisez la fonction SymUnloadModule64. Cette fonction libère la mémoire allouée pour le module de symboles. Pour utiliser à nouveau des symboles pour ce module, vous devez appeler la fonction SymLoadModuleEx même si l’option de chargement différée du symbole est définie.

Diagnostic des problèmes de chargement des symboles

Pour afficher toutes les tentatives de chargement de symboles, appelez SymSetOptions avec SYMOPT_DEBUG. DbgHelp appelle la fonction OutputDebugString avec des informations détaillées sur les recherches de symboles, telles que les répertoires qu’il recherche et les messages d’erreur. Si votre code utilise SymRegisterCallback64, DbgHelp appelle votre fonction de rappel au lieu d’appeler OutputDebugString. Le paramètre ActionCode est défini sur CBA_DEBUG_INFO et le paramètre CallbackData est une chaîne qui peut être affichée.

Pour permettre l'affichage de cette sortie de débogage dans la console sans avoir à modifier votre code source, définissez la variable d'environnement DBGHELP_DBGOUT sur une valeurNULL non avant d’appeler la fonction SymInitialize. Pour consigner les informations dans un fichier, définissez la variable d’environnement DBGHELP_LOG sur le nom du fichier journal à utiliser.

Notez que ces fonctionnalités doivent être utilisées uniquement si nécessaire. Ils peuvent ralentir le chargement des symboles des modules qui contiennent de nombreux symboles.