Percorso dei simboli per i debugger 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. Per altre informazioni sui simboli e sui file di simboli, vedere Simboli.

Alcuni compilatori, tra cui 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.

Suggerimento

Usare con estensione symfix per impostare un percorso predefinito sul server dei simboli pubblico Microsoft pubblico pubblico che funziona correttamente in molte situazioni.

Sintassi del percorso dei simboli

Il percorso del simbolo del debugger è una stringa costituita da più percorsi di directory separati da punto 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 le informazioni sui simboli nelle directory seguenti, elencate in ordine:

  • C:\Dir1\symbols\dll
  • C:\Dir1\dll
  • C:\Dir1

Il debugger ripete quindi questo processo per ogni directory nel percorso del simbolo. Infine, il debugger cerca nella directory corrente e quindi nella directory corrente con ..\dll accodato. Il debugger aggiunge ..\dll, ..\exeo ..\sys, a seconda dei file binari di cui esegue il 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 è necessario preoccuparsi del debugger usando i simboli errati 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 con estensione sympath. Per altri modi per impostare il percorso del simbolo, vedere Controllare il percorso del simbolo più avanti in questo argomento.

Memorizzare nella cache i simboli in locale

I simboli devono essere memorizzati nella cache in locale. Un modo per memorizzare nella cache i simboli in locale consiste nell'includere cache*; o cache*localsymbolcache;* nel percorso del simbolo.

Se si include la stringa cache*; nel percorso del simbolo, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa vengono archiviati nella directory predefinita della cache dei simboli nel computer locale. Ad esempio, il comando seguente indica al debugger di ottenere i 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, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa vengono archiviati nella directory localsymbolcache .

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

.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 di simboli, ad esempio il server di simboli pubblico Microsoft pubblico pubblico. È possibile usare un server di simboli usando una delle stringhe seguenti nel percorso del simbolo.

  • 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 dei simboli predefinito. Questi simboli non vengono memorizzati nella cache nel computer locale.

    .sympath srv*
    
  • Stringa srv*symbolstore

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

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

    Se si include la stringa srv*localcache*symbolstore nel percorso del simbolo, il debugger usa un server di simboli per ottenere i simboli dall'archivio simboli e li memorizza nella directory localcache . Ad esempio, il comando seguente indica al debugger di ottenere i simboli dal serverhttps://msdl.microsoft.com/download/symbols dei simboli Microsoft 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 si posizionano 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 inserire 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 percorso del simbolo.

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

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

Combinare cache* e srv*

Se si include la stringa cache*; nel percorso del simbolo, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa vengono archiviati nella directory predefinita della cache dei simboli nel computer locale. Ad esempio, il comando seguente indica al debugger di ottenere i simboli dall'archivio del server dei simboli Microsoft e 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, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa vengono archiviati nella directory localsymbolcache .

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

.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 più vecchi di 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 è troppo grande.

Caricamento di simboli lazy

Il comportamento predefinito del debugger consiste nell'usare il caricamento di simboli lazy, noto anche come caricamento posticipato dei simboli. Questo tipo di caricamento significa che i simboli non vengono caricati finché non sono necessari.

Quando il percorso del simbolo viene modificato, ad esempio usando il comando con estensione sympath, tutti i moduli caricati con simboli di esportazione vengono ricaricati in modo differinte.

I simboli dei moduli con simboli PDB completi vengono ricaricati in modo differito 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 di simboli PDB, tali simboli non vengono ricaricati in modo differito.

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

Azure DevOps Services artefatti

Un server di simboli è disponibile con Azure Artifacts in Azure DevOps Services. Per informazioni sull'uso di Azure Artifacts in WinDbg, vedere Eseguire il debug con i simboli in WinDbg. Per informazioni generali sui simboli generati da Azure, vedere Panoramica dei simboli.

Controllare il percorso del simbolo

Per controllare il percorso del simbolo, è possibile 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:\MyCachesemplicemente .

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

  • Prima di avviare il debugger, usare le _NT_SYMBOL_PATHvariabili di ambiente 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, il percorso viene impostato tramite ._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 è possibile usare il file | Comando Percorso file simbolo o premere CTRL+S per visualizzare, impostare, modificare o aggiungere al percorso.

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

Risoluzione dei problemi

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

Vedi anche

Symbols

Uso avanzato di SymSrv

Comando .sympath

Con estensione symfix