Compartir a través de


Carga de un módulo de símbolos

Si una aplicación no llama a la función SymInitialize con el parámetro fInvadeProcess establecido en TRUE, debe cargar símbolos para un módulo cuando sean necesarios. Para cargar un módulo de símbolos a petición, la aplicación puede llamar a la función SymLoadModuleEx con una ruta de acceso completa a un nombre de módulo. Cuando se carga el módulo, el controlador de símbolos cargará los símbolos inmediatamente o aplazará la carga, en función de las opciones establecidas mediante la función SymSetOptions .

El código siguiente carga un módulo de símbolos. Tenga en cuenta que supone que ha inicializado el controlador de símbolos mediante el código de Inicialización del controlador de símbolos.

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);
}

Tenga en cuenta que szImageName puede ser una ruta de acceso a cualquier módulo ejecutable que tenga información de depuración (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Además, dwBaseAddr es la dirección base del módulo de símbolos que se va a cargar. Si este valor es 0, el controlador de símbolos obtendrá la dirección base del módulo de símbolos especificado.

Descargar un módulo de símbolos