Condividi tramite


Caricamento di un modulo di simboli

Se un'applicazione non chiama la funzione SymInitialize con il parametro fInvadeProcess impostato su TRUE, deve caricare i simboli per un modulo quando sono necessari. Per caricare un modulo di simboli su richiesta, l'applicazione può chiamare la funzioneSymLoadModuleEx con un percorso completo a un nome di modulo. Quando il modulo viene caricato, il gestore dei simboli caricherà immediatamente i simboli o differirà il carico, a seconda delle opzioni impostate usando la funzione SymSetOptions.

Il codice seguente carica un modulo simbolo. Si noti che si presume che il gestore dei simboli sia stato inizializzato utilizzando il codice in Inizializzazione del gestore simboli.

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

Si noti che szImageName può essere un percorso a qualsiasi modulo eseguibile con informazioni di debug (.exe, .dll, .drv, .sys, .scr, .cpl, .com). Inoltre, dwBaseAddr è l'indirizzo di base del modulo di simboli da caricare. Se questo valore è 0, il gestore dei simboli otterrà l'indirizzo di base dal modulo di simboli specificato.

scaricare un modulo di simboli