Condividi tramite


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 funzioneSymLoadModuleEx 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 simboliche 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, .cplo .com). Usare il parametro BaseOfDll per specificare qualsiasi indirizzo di caricamento, quindi gli indirizzi dei simboli verranno 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 di simboli, usare la funzione SymUnloadModule64. Questa funzione rilascia la memoria allocata per il modulo simbolo. Per usare nuovamente 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 nei 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 invece di 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 valoreNULL non 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.