Partager via


Chargement des symboles

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

Le gestionnaire de symboles peut être utilisé afin de récupérer des informations symboliques pour n’importe quel module ; il n’a pas besoin d’être associé à un processus spécifié dans l’appel SymInitialize. Pour utiliser un module arbitraire, spécifiez le chemin complet de l’image de module dans le paramètre ImageName. Vous pouvez utiliser le chemin de n’importe quel module exécutable qui contient des informations de débogage (.exe, .dll, .drv, .sys, .scr, .cpl ou .com). Utilisez le paramètre BaseOfDll pour spécifier une adresse de chargement, sur laquelle seront basées les adresses de symbole.

Il n’est peut-être pas nécessaire qu’un module de symboles demeure 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 réutiliser des symboles pour ce module, vous devez appeler la fonction SymLoadModuleEx même si l’option de chargement différé de symboles est définie.

Diagnostic des problèmes de chargement de symboles

Pour afficher toutes les tentatives de chargement de symboles, appelez SymSetOptions avec SYMOPT_DEBUG. Cela amène DbgHelp à appeler la fonction OutputDebugString avec des informations détaillées sur les recherches de symboles, telles que les répertoires qu’elle parcourt 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 a la valeur CBA_DEBUG_INFO et le paramètre CallbackData est une chaîne qui peut être affichée.

Pour permettre à cette sortie de débogage d’être affichée dans la console sans changer votre code source, définissez la variable d’environnement DBGHELP_DBGOUT sur une valeur différente de NULL avant d’appeler la fonction SymInitialize. Pour enregistrer 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 ne doivent être utilisées que si nécessaire. Elles peuvent ralentir le chargement des symboles des modules qui contiennent de nombreux symboles.