Partager via


Chargement d’un module de symboles

Si une application n’appelle pas la fonction SymInitialize avec le paramètre fInvadeProcess défini sur TRUE, il doit charger des symboles pour un module lorsqu’il est nécessaire. Pour charger un module de symboles à la demande, l’application peut appeler la fonction SymLoadModuleEx avec un chemin d’accès complet à un nom de module. Lorsque le module est chargé, le gestionnaire de symboles charge immédiatement les symboles ou reporte la charge, selon les options définies à l’aide de la fonction SymSetOptions.

Le code suivant charge un module de symboles. Notez qu’il suppose que vous avez initialisé le gestionnaire de symboles à l’aide du code dans Initialisation du gestionnaire de symboles.

TCHAR  szImageName[MAX_PATH] = TEXT("foo.dll");
DWORD64 dwBaseAddr = 0;

if (SymLoadModuleEx(hProcess,    // target process 
                    NULL,        // handle to image - not used
                    szImageName, // name of image file
                    NULL,        // name of module - not required
                    dwBaseAddr,  // base address - not required
                    0,           // size of image - not required
                    NULL,        // MODLOAD_DATA used for special cases 
                    0))          // flags - not required
{
    // SymLoadModuleEx returned success
}
else
{
    // SymLoadModuleEx failed
    DWORD error = GetLastError();
    printf("SymLoadModuleEx returned error : %d\n", error);
}

Notez que szImageName peut être un chemin d’accès à n’importe quel module exécutable disposant d’informations de débogage (.exe, .dll, .drv, .sys, .scr, .cpl, .com). En outre, dwBaseAddr est l’adresse de base du module de symboles à charger. Si cette valeur est 0, le gestionnaire de symboles obtient l’adresse de base du module de symboles spécifié.

déchargement d’un module de symboles