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. 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 file, che consentono 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 il file 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 per puntare alle posizioni dei file di simboli.
Suggerimento
Usare il prefisso .symfix per impostare un percorso predefinito sul server di simboli pubblico Microsoft pubblico 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 avvia 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 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
accodamento. Il debugger aggiunge ..\dll
, ..\exe
o ..\sys
, a seconda dei file binari che 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 che esegue il debug. Non è necessario preoccuparsi del debugger usando i simboli sbagliati che trova prima in questa sequenza. Per altre informazioni sulle risposte quando i file di simboli non sono disponibili, vedere Nomi dei simboli corrispondenti.
Un modo per impostare il percorso del simbolo è immettendo 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.
Simboli della cache in locale
È consigliabile memorizzare nella cache i simboli 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 nel percorso del simbolo, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa cache*;
vengono archiviati 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 nel percorso del simbolo, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa cache*localsymbolcache;
vengono archiviati nella directory localymbolcache .
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 simboli, ad esempio il server di simboli pubblico Microsoft pubblico pubblico. È possibile usare un server 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 simboli dall'archivio 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 simboli dall'archivio simboli. Ad esempio, il comando seguente indica al debugger di ottenere simboli dall'archivio server 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 simboli dall'archivio simboli e li memorizza nella cache nella directory localcache . Ad esempio, il comando seguente indica al debugger di ottenere simboli dall'archivio server simboli Microsoft e memorizzare nella cache i simboli inc:\MyServerSymbols
..sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Se si dispone di una directory nel computer in cui si inseriscono 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 percorso del simbolo.
.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Per altre informazioni sui server dei simboli e sugli archivi simboli, vedere Archivi simboli personalizzati e server simboli.
Combinare cache* e srv*
Se si include la stringa nel percorso del simbolo, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa cache*;
vengono archiviati 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 simboli Microsoft e memorizzarli nella cache dei simboli predefinita.
.sympath cache*;srv*https://msdl.microsoft.com/download/symbols
Se si include la stringa nel percorso del simbolo, i simboli caricati da qualsiasi elemento visualizzato a destra di questa stringa cache*localsymbolcache;
vengono archiviati nella directory localymbolcache .
Ad esempio, il comando seguente indica al debugger di ottenere simboli dall'archivio server 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 precedenti a una data specificata o eliminare file precedenti sufficienti in modo che le dimensioni della cache risultanti siano inferiori a una quantità specificata. Questa pulizia dei file di cache è utile se l'archivio downstream diventa troppo grande.
Caricamento di simboli lazy
Il comportamento predefinito del debugger consiste nell'usare il caricamento dei simboli lazy, noto anche come caricamento di simboli posticipati. 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 ritardato.
I simboli dei moduli con simboli PDB completi vengono ricaricati in modo ritardato 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 ritardato.
È possibile disattivare il caricamento dei simboli lazy in CDB e KD usando l'opzione della riga di comando -s. È anche possibile forzare il caricamento dei simboli usando il comando simboli di caricamento ld oppure usando il comando del modulo di ricaricamento insieme all'opzione /f
.
Azure DevOps Services artefatti
Un server di simboli è disponibile con Gli artefatti di Azure in Azure DevOps Services. Per informazioni sull'uso degli artefatti di Azure 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 del percorso dell'archivio simboli con estensione symfix per impostare un percorso predefinito sul server di simboli Microsoft pubblico che funziona bene in molte situazioni. Per impostare una cache locale, digitare
.symfix C:\MyCache
solo .Usare il comando con estensione sympath per visualizzare, impostare, modificare o aggiungere al percorso.
Prima di avviare il debugger, usare le
_NT_SYMBOL_PATH
variabili 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
Usare !sym rumoroso o l'opzione -nWinDbg Command-Line per visualizzare altri dettagli come simboli vengono caricati. Per altre strategie di risoluzione dei problemi, vedere Verifica dei simboli.