Percorsi dei simboli

La libreria DbgHelp usa il percorso di ricerca dei simboli per individuare i simboli di debug (file con estensione pdb e dbg). Il percorso di ricerca può essere costituito da uno o più elementi di percorso separati da punto e virgola.

Specifica dei percorsi di ricerca

Per specificare dove il gestore dei simboli eseguirà la ricerca nelle directory dei dischi per i file di simboli, chiamare la funzione SymSetSearchPath. In alternativa, è possibile specificare un percorso di ricerca dei simboli nel parametro UserSearchPath della funzione SymInitialize .

Il parametro UserSearchPath in SymInitialize e il parametro SearchPath in SymSetSearchPath accettano un puntatore a una stringa con terminazione Null che specifica un percorso o una serie di percorsi separati da un punto e virgola. Il gestore dei simboli usa questi percorsi per cercare i file di simboli. Se questo parametro è NULL, il gestore dei simboli cerca nella directory contenente il modulo in cui vengono cercati i simboli. In caso contrario, se questo parametro viene specificato come valore non NULL , il gestore dei simboli cerca innanzitutto i percorsi impostati dall'applicazione prima di eseguire la ricerca nella directory del modulo. Se si imposta la variabile di ambiente _NT_SYMBOL_PATH o _NT_ALT_SYMBOL_PATH, il gestore dei simboli cerca i file di simboli nell'ordine seguente:

  1. Variabile di ambiente _NT_SYMBOL_PATH.
  2. Variabile di ambiente _NT_ALT_SYMBOL_PATH.
  3. Directory contenente il modulo corrispondente.

Per recuperare i percorsi di ricerca, chiamare la funzione SymGetSearchPath.

Il percorso di ricerca per i file di database di programma (con estensione pdb) è diverso dal percorso dei file di debug (con estensione dbg). L'algoritmo è determinato dalla funzionalità della libreria dei simboli. Per impostazione predefinita, Microsoft Visual C/C++ crea simboli di formato Microsoft, li rimuove dall'immagine e li inserisce in un file con estensione pdb separato. In genere, il file con estensione pdb si troverà nella directory che contiene l'immagine eseguibile. Visual C/C++ incorpora il percorso assoluto del file con estensione pdb nell'immagine eseguibile. Se il gestore dei simboli non riesce a trovare il file con estensione pdb in tale percorso o se il file con estensione pdb è stato spostato in un'altra directory, il gestore dei simboli individua il file con estensione pdb usando il percorso di ricerca descritto per i file con estensione dbg.

Tipi di elemento Path

Esistono tre tipi di elementi di percorso.

Elemento Path standard

Viene eseguita una ricerca in un elemento path standard cercando nella radice della directory specificata dall'elemento path. Il gestore dei simboli cerca anche in una sottodirectory di "simboli" che corrisponde all'estensione di file del modulo per cui vengono cercati i simboli. Si tratta in genere di "dll", "exe" o "sys". Infine, cerca in una sottodirectory denominata "simboli" con una directory con lo stesso nome dell'estensione. Ad esempio, se l'elemento del percorso del simbolo è "c:\mySymbols" e il file in cui vengono cercati i simboli è "boo.dll", verranno cercate le directory seguenti.

  • c:\mySymbols
  • c:\mySymbols\dll
  • c:\mySymbols\symbols\dll

Il gestore dei simboli usa questa logica per cercare qualsiasi elemento di percorso che non soddisfi i criteri per essere un server di simboli o una cache (descritto di seguito).

Elemento Symbol Server Path

Un elemento del percorso del server dei simboli usa una tecnologia speciale che consente di individuare un simbolo che corrisponde esattamente al modulo in questione. Per altri dettagli, vedere Uso di SymSrv .

Il gestore dei simboli considera un elemento path come server di simboli se inizia con il testo "srv*".

Nota

Se il testo "srv*" non viene specificato ma l'elemento path effettivo è un archivio server dei simboli, il gestore dei simboli fungerà da se fosse specificato "srv*". Il gestore dei simboli determina questa determinazione cercando l'esistenza di un file denominato "pingme.txt" nella directory radice del percorso specificato.

 

Elemento Cache Path

Un elemento del percorso della cache è una variante di un elemento del percorso del server di simboli.

Questa directory viene eseguita come qualsiasi altro server di simboli. Tuttavia, se il simbolo non viene trovato qui e viene trovato in un elemento di percorso più lungo la catena del percorso del simbolo, il simbolo verrà copiato e archiviato nel server dei simboli specificato in questo elemento.

Il gestore dei simboli considera un elemento path come elemento della cache se inizia con il testo "cache*". Per specificare una cache in "c:\myCache", usare un elemento percorso simbolo "cache*c:\myCache".

Percorso di ricerca di esempio

Per vedere come funziona, impostare questo percorso di ricerca.

cache*c:\myCache;srv*\\symbols\symbols

Di seguito è riportato un elenco dell'output dettagliato del gestore di simboli durante la ricerca di ntdll.pdb, usando il percorso di ricerca elencato sopra.

DBGHELP: .\ntdll.pdb - file not found
DBGHELP: .\dll\ntdll.pdb - file not found
DBGHELP: .\symbols\dll\ntdll.pdb - file not found
SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found
SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied
DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached
DBGHELP: ntdll - private symbols & lines
c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb

Le prime tre righe di output mostrano il gestore dei simboli che elabora il primo elemento path di .. Si tratta di un elemento path standard.

La quarta riga mostra il gestore dei simboli usando il server dei simboli per cercare il file nel secondo elemento path di cui è un elemento del percorso della cache*c:\myCache cache.

La quinta riga mostra che il file si trova nel terzo elemento path di srv*\\symbols\symbols, che è un elemento del percorso del server di simboli.

La sesta riga mostra che il file viene copiato nella cache.

Le ultime due righe aperte dal file dalla cache.