Condividi tramite


Percorso dei simboli per i debugger di Windows

Il percorso del simbolo specifica i percorsi in cui i debugger di Windows, ad esempio WinDbg, KD, CDB e NTST cercano i file di simboli.

Avvio rapido: Usare il .symfix comando per configurare un percorso predefinito per il server dei simboli pubblici di Microsoft, che funziona correttamente nella maggior parte degli scenari di debug.

Configurare correttamente il percorso del simbolo per abilitare il debug efficiente. I debugger possono quindi individuare e caricare automaticamente i file di simboli necessari per analizzare l'esecuzione del codice. Questa guida illustra come configurare i percorsi dei simboli, usare il server dei simboli di Microsoft, memorizzare nella cache i simboli in locale e risolvere i problemi comuni. Per altre informazioni sui simboli e sui file di simboli, vedere Simboli.

Alcuni compilatori, inclusi Microsoft Visual Studio, inseriscono i file di simboli nella stessa directory dei file binari. I file di simboli e i file binari controllati contengono informazioni sul percorso e sul nome del file, che consente al debugger di trovare automaticamente i file di simboli. Se si esegue il debug di un processo in modalità utente nel computer in cui è stato compilato l'eseguibile e se i file di simboli si trovano nel percorso originale, il debugger può individuare i file di simboli senza impostare il percorso del simbolo.

Nella maggior parte delle altre situazioni, è necessario impostare il percorso del simbolo in modo che punti ai percorsi dei file di simboli.

Consiglio

Usare .symfix per impostare un percorso predefinito al server dei simboli pubblici di Microsoft, che funziona bene in molte situazioni.

Sintassi del percorso dei simboli

Il percorso del simbolo del debugger è una stringa costituita da più percorsi di directory separati da punti e virgola. Ad esempio, C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB.

I percorsi relativi sono supportati. Tuttavia, è necessario aggiungere una lettera di unità o una condivisione di rete prima di ogni percorso, a meno che non si avvii sempre il debugger dalla stessa directory. Sono supportate anche le condivisioni di rete.

Per ogni directory nel percorso del simbolo, il debugger cerca tre directory. Ad esempio, se il percorso del simbolo include C:\Dir1 e il debugger cerca informazioni sui simboli per una DLL, il debugger cerca in questo ordine:

  1. C:\Dir1\symbols\dll
  2. C:\Dir1\dll
  3. C:\Dir1

Il debugger ripete questo processo per ogni directory nel percorso del simbolo.

Posizioni di fallback finali:

  • Directory corrente
  • Directory corrente con ..\dll, ..\exe o ..\sys aggiunto (a seconda del tipo binario sottoposto a debug)

I file di simboli hanno indicatori di data e ora. Il debugger cerca sempre i simboli che corrispondono al timestamp nei file binari di cui esegue il debug. Non ti devi preoccupare che il debugger utilizzi i simboli sbagliati trovati per primi in questa sequenza. Per altre informazioni sulle risposte quando i file di simboli non sono disponibili, vedere Corrispondenza dei nomi dei simboli.

Un modo per impostare il percorso del simbolo consiste nell'immettere il comando .sympath. Per altri modi di impostare il percorso del simbolo, vedere Controlla il percorso del simbolo più avanti in questo argomento.

Controllare il percorso del simbolo

Per controllare il percorso del simbolo, selezionare uno dei metodi seguenti:

  • Usare il comando .symfix set symbol store path per impostare un percorso predefinito sul server dei simboli Microsoft pubblico che funziona bene in molte situazioni. Per impostare una cache locale, digitare .symfix C:\MyCache.

  • Usare il comando .sympath per visualizzare, impostare, modificare o aggiungere al percorso.

  • Prima di avviare il debugger, usare le variabili di ambiente _NT_SYMBOL_PATH e _NT_ALT_SYMBOL_PATH per impostare il percorso. Il percorso del simbolo viene creato aggiungendo _NT_SYMBOL_PATH dopo _NT_ALT_SYMBOL_PATH. In genere, si imposta il percorso tramite il _NT_SYMBOL_PATH. Tuttavia, è possibile usare _NT_ALT_SYMBOL_PATH per eseguire l'override di queste impostazioni in casi speciali, ad esempio se si dispone di versioni private dei file di simboli condivisi. Se si tenta di aggiungere una directory non valida tramite queste variabili di ambiente, il debugger ignora questa directory.

  • Quando si avvia il debugger, usare l'opzione della riga di comando -y per impostare il percorso.

  • Solo in WinDbg, usare il file | Comando percorso del file di simboli o premere CTRL+S per visualizzare, impostare, modificare o aggiungere al percorso del file.

Se si utilizza l'opzione -sins della riga di comando, il debugger ignora la variabile di ambiente del percorso dei simboli.

Memorizzare nella cache i simboli in locale

È consigliabile memorizzare nella cache i simboli in locale per migliorare le prestazioni del debugger e ridurre il traffico di rete. Per memorizzare nella cache i simboli, includere cache*; o cache*localsymbolcache; nel percorso del simbolo.

Se si include la stringa cache*; nel percorso del simbolo, il debugger archivia i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa nella directory della cache dei simboli predefinita nel computer locale. Ad esempio, il comando seguente indica al debugger di ottenere simboli dalla condivisione di rete denominata \\someshare e memorizzare nella cache i simboli nel percorso predefinito nel computer locale.

.sympath cache*;\\someshare

Se si include la stringa cache*localsymbolcache; nel percorso del simbolo, il debugger archivia i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa nella directory localsymbolcache .

Ad esempio, il comando seguente indica al debugger di ottenere simboli dalla condivisione di rete \\someshare e memorizzare nella cache i simboli nella directory c:\MySymbols.

.sympath cache*C:\MySymbols;\\someshare

Uso di un server di simboli: srv*

Se si è connessi a Internet o a una rete aziendale, il modo più efficiente per accedere ai simboli consiste nell'usare un server simboli, come il server dei simboli pubblico Microsoft . È possibile usare un server di simboli usando una delle stringhe seguenti nel percorso del simbolo.

  • La stringa srv*

    Se si include la stringa srv* nel percorso del simbolo, il debugger usa un server di simboli per ottenere i simboli dall'archivio simboli predefinito. Ad esempio, il comando seguente indica al debugger di ottenere i simboli dall'archivio simboli predefinito. Questi simboli non vengono memorizzati nella cache nel computer locale.

    .sympath srv*
    
  • La stringa srv*symbolstore

    Se includi la stringa srv*symbolstore nel percorso dei simboli, il debugger utilizza un server di simboli per ottenere i simboli dall'archivio di simboli . Ad esempio, il comando seguente indica al debugger di ottenere i simboli dal server dei simboli Microsoft store. Questi simboli non vengono memorizzati nella cache nel computer locale.

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • La stringa srv*localsymbolcache*symbolstore

    Se si include la stringa nel percorso del simbolo, il debugger usa un server di simboli per ottenere i simboli dall'archivio simboli e li memorizza nella cache nella directory localcache. Ad esempio, il comando seguente indica al debugger di ottenere i simboli dal server dei simboli Microsoft,https://msdl.microsoft.com/download/symbols e memorizzare nella cache i simboli in c:\MyServerSymbols.

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

Se nel computer è presente una directory in cui inserire manualmente i simboli, non usare tale directory come cache per i simboli ottenuti da un server di simboli. Usare invece due directory separate. Ad esempio, è possibile posizionare manualmente i simboli in c:\MyRegularSymbols e quindi designare c:\MyServerSymbols come cache per i simboli ottenuti da un server. Nell'esempio seguente viene illustrato come specificare entrambe le directory nel proprio percorso dei simboli.

.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols

Per altre informazioni sui server di simboli e sugli archivi di simboli, vedere Archivi simboli personalizzati e server di simboli.

Combinare cache* e srv*

Se si include la stringa cache*; nel percorso del simbolo, il debugger archivia i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa nella directory della cache dei simboli predefinita nel computer locale. Ad esempio, il comando seguente indica al debugger di ottenere simboli dall'archivio del server dei simboli Microsoft e di memorizzarli nella directory predefinita della cache dei simboli.

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

Se si include la stringa cache*localsymbolcache; nel percorso del simbolo, il debugger archivia i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa nella directory localsymbolcache .

Ad esempio, il comando seguente indica al debugger di ottenere i simboli dal server dei simboli Microsoft archiviare e memorizzare nella cache i simboli nella directory c:\MySymbols.

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

Usare AgeStore per ridurre le dimensioni della cache

È possibile usare lo strumento AgeStore per eliminare i file memorizzati nella cache precedenti a una data specificata o per eliminare file abbastanza vecchi in modo che le dimensioni della cache risultanti siano inferiori a una quantità specificata. Questa pulizia dei file della cache è utile se l'archivio downstream diventa troppo grande.

Caricamento di simboli lazy

Il debugger utilizza di default il lazy loading dei simboli. Questo tipo di caricamento indica che il debugger non carica i simboli finché non ne ha bisogno.

Quando si modifica il percorso del simbolo, ad esempio usando il comando sympath, il debugger ricarica lentamente tutti i moduli caricati con simboli di esportazione.

Il debugger ricarica pigramente i simboli dei moduli con simboli PDB completi se il nuovo percorso non include più il percorso originale usato per caricare i simboli PDB. Se il nuovo percorso include ancora il percorso originale del file simboli PDB, il debugger non ricarica i simboli in modo pigro.

È possibile disattivare il caricamento pigro dei simboli in CDB e KD usando l'opzione della riga di comando -s. È anche possibile forzare il caricamento dei simboli usando il comando ld carica simboli oppure usando il comando .reload del modulo insieme all'opzione /f.

Artefatti di Azure DevOps Services

Un server di simboli è disponibile con Azure Artifacts in Azure DevOps Services. Per ottenere informazioni su come utilizzare Azure Artifacts in WinDbg, consulta Debugging con simboli in WinDbg (Azure Artifacts). Per informazioni generali sui simboli generati da Azure, vedere panoramica dei simboli di (Azure Artifacts).

Risoluzione dei problemi

Usare !sym noisy o -nWinDbg Opzione Command-Line per visualizzare dettagli aggiuntivi quando vengono caricati i simboli. Per altre strategie di risoluzione dei problemi, vedere Verifica dei simboli.

Passaggi successivi

Dopo aver configurato il percorso del simbolo, informazioni su come verificare che i simboli vengano caricati correttamente e risolvere i problemi comuni:

Attività correlate:

Informazioni di riferimento sul comando: