Delen via


Symboolpaden

De Library DbgHelp gebruikt het zoekpad voor symbolen om foutopsporingssymbolen (.pdb- en .dbg-bestanden) te vinden. Het zoekpad kan bestaan uit een of meer padelementen, gescheiden door puntkomma's.

Zoekpaden opgeven

Als u wilt opgeven waar de symboolhandler schijfmappen naar symboolbestanden zoekt, roept u de functie SymSetSearchPath aan. U kunt ook een zoekpad voor symbolen opgeven in de parameter UserSearchPath van de functie SymInitialize.

De parameter UserSearchPath in SymInitialize en de parameter SearchPath in SymSetSearchPath een aanwijzer naar een door null beëindigde tekenreeks die een pad of reeks paden aangeeft, gescheiden door een puntkomma. De symboolhandler gebruikt deze paden om te zoeken naar symboolbestanden. Als deze parameter is NULL-, zoekt de symboolhandler in de map met de module waarvoor symbolen worden doorzocht. Als deze parameter anders is opgegeven als een niet-NULL- waarde, doorzoekt de symboolhandler eerst de paden die door de toepassing zijn ingesteld voordat de modulemap wordt doorzocht. Als u de omgevingsvariabele _NT_SYMBOL_PATH of _NT_ALT_SYMBOL_PATH instelt, zoekt de symboolhandler in de volgende volgorde naar symboolbestanden:

  1. De omgevingsvariabele _NT_SYMBOL_PATH.
  2. De omgevingsvariabele _NT_ALT_SYMBOL_PATH.
  3. De map die de bijbehorende module bevat.

Als u de zoekpaden wilt ophalen, roept u de functie SymGetSearchPath aan.

Het zoekpad voor programmadatabasebestanden (.pdb) verschilt van het pad voor foutopsporingsbestanden (.dbg). Het algoritme wordt bepaald door de functionaliteit van de symboolbibliotheek. In Microsoft Visual C/C++ worden standaard Microsoft-notatiesymbolen gemaakt, verwijderd uit de afbeelding en worden ze in een afzonderlijk PDB-bestand opgeslagen. Normaal gesproken bevindt het .pdb-bestand zich in de map die de uitvoerbare installatiekopieën bevat. Visual C/C++ sluit het absolute pad naar het .pdb-bestand in de uitvoerbare installatiekopieën in. Als de symboolhandler het PDB-bestand op die locatie niet kan vinden of als het .pdb-bestand naar een andere map is verplaatst, zoekt de symboolhandler het .pdb-bestand met behulp van het zoekpad dat wordt beschreven voor .dbg-bestanden.

Padelementtypen

Er zijn drie typen padelementen.

Standaardpadelement

Een standaardpadelement wordt doorzocht door te zoeken in de hoofdmap van de map die is opgegeven door het padelement. De symboolhandler kijkt ook in een submap van 'symbolen' die overeenkomt met de bestandsextensie van de module waarnaar symbolen worden gezocht. Dit is meestal 'dll', 'exe' of 'sys'. Ten slotte ziet het eruit in een submap met de naam 'symbolen' met een map met dezelfde naam als de extensie. Als het symboolpadelement bijvoorbeeld 'c:\mySymbols' is en het bestand waarnaar symbolen worden gezocht,boo.dllis, worden de volgende mappen doorzocht.

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

De symboolhandler gebruikt deze logica om een padelement te doorzoeken dat niet voldoet aan de criteria om een symboolserver te zijn of cache (hieronder beschreven).

Padelement symboolserver

Een symboolserver padelement maakt gebruik van speciale technologie waarmee een symbool kan worden gevonden dat exact overeenkomt met de betreffende module. Zie SymSrv- gebruiken voor meer informatie.

De symboolhandler behandelt een padelement als een symboolserver als deze begint met de tekst 'srv*'.

Notitie

Als de tekst 'srv*' niet is opgegeven, maar het werkelijke padelement een symboolserverarchief is, fungeert de symboolhandler alsof 'srv*' is opgegeven. De symboolhandler maakt deze bepaling door te zoeken naar het bestaan van een bestand met de naam 'pingme.txt' in de hoofdmap van het opgegeven pad.

 

Cachepadelement

Een cache padelement is een variatie op een symboolserverpadelement.

Deze map wordt doorzocht zoals elke andere symboolserver. Als het symbool hier echter niet wordt gevonden en het wordt gevonden in een padelement verderop in de keten van het symboolpad, wordt het symbool gekopieerd en opgeslagen op de symboolserver die in dit element is opgegeven.

De symboolhandler behandelt een padelement als een cache-element als deze begint met de tekst 'cache*'. Als u een cache wilt opgeven in c:\myCache, gebruikt u een symboolpadelement van 'cache*c:\myCache'.

Voorbeeld van zoekpad

Als u wilt zien hoe dit werkt, stelt u dit zoekpad in.

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

Hier volgt een lijst met de uitgebreide uitvoer van de symboolhandler tijdens het zoeken naar ntdll.pdb, met behulp van het bovenstaande zoekpad.

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

De eerste drie regels uitvoer tonen de symboolhandler die het eerste padelement van .verwerkt. Dit is een standaardpadelement.

De vierde regel toont de symboolhandler met behulp van de symboolserver om naar het bestand te zoeken in het tweede padelement van cache*c:\myCache dat een cachepadelement is.

Op de vijfde regel wordt het bestand weergegeven in het derde padelement van srv*\\symbols\symbols, een symboolserverpadelement.

Op de zesde regel ziet u dat het bestand naar de cache wordt gekopieerd.

De laatste twee regels die het bestand vanuit de cache wordt geopend.