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 resulten 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 Inicializar el 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