Caricamento simboli

Il gestore dei simboli caricherà i simboli quando si chiama la funzione SymInitialize con il parametro fInvadeProcess impostato su TRUE o quando si chiama la funzione SymLoadModuleEx per specificare un modulo. In entrambi i casi, il gestore dei simboli carica i simboli o rinvia il caricamento dei simboli fino a quando non vengono richiesti i simboli, a seconda delle opzioni impostate dalla funzione SymSetOptions.

Il gestore dei simboli può essere usato per recuperare le informazioni simbolico per qualsiasi modulo; non deve essere associato a un processo specificato nella chiamata SymInitialize. Per usare un modulo arbitrario, specificare il percorso completo dell'immagine del modulo nel parametro ImageName . È possibile usare un percorso per qualsiasi modulo eseguibile con informazioni di debug (.exe, .dll, drv, .sys, scr, .cpl o .com). Usare il parametro BaseOfDll per specificare qualsiasi indirizzo di caricamento, quindi gli indirizzi dei simboli saranno basati su tale indirizzo.

Potrebbe non essere necessario mantenere un modulo simbolo caricato durante la durata di un'applicazione. Per rilasciare il modulo simbolo dall'elenco di moduli del gestore simboli, usare la funzione SymUnloadModule64. Questa funzione rilascia la memoria allocata per il modulo simbolo. Per usare di nuovo i simboli per tale modulo, è necessario chiamare la funzione SymLoadModuleEx anche se è impostata l'opzione di caricamento posticipata del simbolo.

Diagnosi dei problemi di caricamento dei simboli

Per visualizzare tutti i tentativi di caricamento dei simboli, chiamare SymSetOptions con SYMOPT_DEBUG. In questo modo DbgHelp chiama la funzione OutputDebugString con informazioni dettagliate sulle ricerche di simboli, ad esempio le directory in cui viene eseguita la ricerca e i messaggi di errore. Se il codice usa SymRegisterCallback64, DbgHelp chiamerà la funzione di callback anziché chiamare OutputDebugString. Il parametro ActionCode è impostato su CBA_DEBUG_INFO e il parametro CallbackData è una stringa che può essere visualizzata.

Per abilitare la visualizzazione dell'output di debug nella console senza modificare il codice sorgente, impostare la variabile di ambiente DBGHELP_DBGOUT su un valore non NULL prima di chiamare la funzione SymInitialize . Per registrare le informazioni in un file, impostare la variabile di ambiente DBGHELP_LOG sul nome del file di log da usare.

Si noti che queste funzionalità devono essere usate solo quando necessario. Possono rallentare il caricamento dei simboli dei moduli che contengono molti simboli.