Symboolpad voor Windows-foutopsporingsprogramma's
Het symboolpad geeft locaties op waar Windows-foutopsporingsprogramma's, zoals WinDbg, KD, CDB en NTST, zoeken naar symboolbestanden. Zie Symbolenvoor meer informatie over symbolen en symboolbestanden.
Sommige compilers, waaronder Microsoft Visual Studio, plaatsen symboolbestanden in dezelfde map als de binaire bestanden. De symboolbestanden en de gecontroleerde binaire bestanden bevatten pad- en bestandsnaamgegevens, waarmee het foutopsporingsprogramma de symboolbestanden automatisch kan vinden. Als u fouten opssport in een gebruikersmodusproces op de computer waarop het uitvoerbare bestand is gebouwd en als de symboolbestanden zich op de oorspronkelijke locatie bevinden, kan het foutopsporingsprogramma de symboolbestanden vinden zonder dat u het symboolpad instelt.
In de meeste andere situaties moet u het symboolpad zo instellen dat deze verwijst naar de bestandslocaties van uw symbool.
(Assuming "Tip" refers to a gratuity) Fooi
Gebruik .symfix om een standaardpad in te stellen op de openbare microsoft-symboolserver die in veel situaties goed werkt.
Symboolpadsyntaxis
Het symboolpad van de debugger is een tekenreeks die bestaat uit meerdere paden, gescheiden door puntkomma's. Bijvoorbeeld C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB
.
Relatieve paden worden ondersteund. U moet echter vóór elk pad een stationsletter of een netwerkshare toevoegen, tenzij u altijd het foutopsporingsprogramma vanuit dezelfde map start. Netwerkshares worden ook ondersteund.
Voor elke map in het symboolpad zoekt de debugger in drie mappen. Als het symboolpad bijvoorbeeld C:\Dir1
bevat en het foutopsporingsprogramma zoekt naar symboolgegevens voor een DLL, zoekt het foutopsporingsprogramma naar symboolgegevens in de volgende mappen, vermeld in de volgorde:
C:\Dir1\symbols\dll
C:\Dir1\dll
C:\Dir1
Het foutopsporingsprogramma herhaalt dit proces vervolgens voor elke map in het symboolpad. Ten slotte zoekt het foutopsporingsprogramma in de huidige map en vervolgens in de huidige map met ..\dll
eraan toegevoegd. Het foutopsporingsprogramma voegt ..\dll
, ..\exe
of ..\sys
toe, afhankelijk van de binaries die worden gedebugged.
Symboolbestanden hebben datum- en tijdstempels. De debugger zoekt altijd naar de symbolen die overeenkomen met het tijdstempel op de binaire bestanden die het aan het debuggen is. U hoeft zich geen zorgen te maken over het foutopsporingsprogramma dat de verkeerde symbolen gebruikt die het eerst in deze volgorde vindt. Zie Overeenkomende symboolnamenvoor meer informatie over antwoorden wanneer er geen symbolenbestanden beschikbaar zijn.
Een manier om het symboolpad in te stellen is door de .sympath commandin te voeren. Voor andere manieren om het symboolpad in te stellen, zie Het pad naar het symbool beheren verderop in dit onderwerp.
Symbolen lokaal cachen
U moet uw symbolen lokaal opslaan in de cache. Een manier om symbolen lokaal in de cache op te slaan, is door cache*;
of cache*localsymbolcache;*
op te nemen in uw symboolpad.
Als u de tekenreeks opneemt cache*;
in het symboolpad, worden symbolen geladen vanaf een element dat rechts van deze tekenreeks wordt weergegeven, opgeslagen in de standaardmap voor symboolcache op de lokale computer. De volgende opdracht vertelt het foutopsporingsprogramma bijvoorbeeld om symbolen op te halen uit de netwerkshare met de naam \\someshare
en de symbolen in de cache in de standaardlocatie op de lokale computer op te slaan.
.sympath cache*;\\someshare
Als u de tekenreeks cache*localsymbolcache;
in uw symboolpad opneemt, worden symbolen die worden geladen vanuit een element dat rechts van deze tekenreeks wordt weergegeven, opgeslagen in de localsymbolcache map.
Met de volgende opdracht wordt bijvoorbeeld aan het foutopsporingsprogramma aangegeven dat symbolen van de netwerkshare worden opgehaald \\someshare
en dat de symbolen in de c:\MySymbols
map in de cache worden opgeslagen.
.sympath cache*C:\MySymbols;\\someshare
Een symboolserver gebruiken: srv*
Als u verbinding hebt met internet of een bedrijfsnetwerk, kunt u het beste toegang krijgen tot symbolen door een symboolserver te gebruiken, zoals de openbare openbare Microsoft-symboolserver. U kunt een symboolserver gebruiken met behulp van een van de volgende tekenreeksen in uw symboolpad.
De tekenreeks
srv*
Als u de tekenreeks
srv*
in uw symboolpad opneemt, gebruikt het foutopsporingsprogramma een symboolserver om symbolen op te halen uit het standaardsymboolarchief. De volgende opdracht vertelt het foutopsporingsprogramma bijvoorbeeld om symbolen op te halen uit het standaardsymboolarchief. Deze symbolen worden niet in de cache opgeslagen op de lokale computer..sympath srv*
De tekenreeks
srv*symbolstore
Als u de tekenreeks
srv*symbolstore
in uw symboolpad opneemt, gebruikt de debugger een symboolserver om symbolen op te halen uit de -symbolstore. De volgende opdracht vertelt het foutopsporingsprogramma bijvoorbeeld om symbolen op te halen uit de Microsoft-symboolserver store. Deze symbolen worden niet in de cache opgeslagen op de lokale computer..sympath srv*https://msdl.microsoft.com/download/symbols
De tekenreeks
srv*localsymbolcache*symbolstore
Als u de tekenreeks
srv*localcache*symbolstore
in uw symboolpad opneemt, gebruikt de debugger een symboolserver om symbolen op te halen uit de symboolopslag en slaat deze op in de cache in de lokale cache map. De volgende opdracht vertelt het foutopsporingsprogramma bijvoorbeeld om symbolen op te halen van de Microsoft-symboolserverhttps://msdl.microsoft.com/download/symbols
en om de symbolen inc:\MyServerSymbols
te cachen..sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Als u een map op uw computer hebt waar u symbolen handmatig plaatst, gebruikt u die map niet als de cache voor symbolen die zijn verkregen van een symboolserver. Gebruik in plaats daarvan twee afzonderlijke mappen. U kunt bijvoorbeeld handmatig symbolen in c:\MyRegularSymbols
plaatsen en vervolgens c:\MyServerSymbols
aanwijzen als een cache voor symbolen die zijn verkregen van een server. In het volgende voorbeeld wordt getoond hoe u beide mappen in uw symboolpad kunt specificeren.
.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Zie Aangepaste symboolarchieven en symboolserversvoor meer informatie over symboolservers en symboolarchieven.
Combineer cache* en srv*
Als u de tekenreeks opneemt cache*;
in het symboolpad, worden symbolen geladen vanaf een element dat rechts van deze tekenreeks wordt weergegeven, opgeslagen in de standaardmap voor symboolcache op de lokale computer. De volgende opdracht vertelt het foutopsporingsprogramma om symbolen te halen van de Microsoft-symboolserver en deze op te slaan in de standaard cachemap voor symbolen.
.sympath cache*;srv*https://msdl.microsoft.com/download/symbols
Als u de tekenreeks cache*localsymbolcache;
in uw symboolpad opneemt, worden symbolen die worden geladen vanuit een element dat rechts van deze tekenreeks wordt weergegeven, opgeslagen in de localsymbolcache map.
Met de volgende opdracht wordt bijvoorbeeld aan het foutopsporingsprogramma aangegeven dat symbolen worden opgehaald uit de Microsoft-symboolserver en dat de symbolen in de map c:\MySymbols
worden opgeslagen en gecachet.
.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols
AgeStore gebruiken om de cachegrootte te verkleinen
U kunt het hulpprogramma AgeStore gebruiken om in de cache opgeslagen bestanden te verwijderen die ouder zijn dan een opgegeven datum, of om voldoende oude bestanden te verwijderen, zodat de resulterende cachegrootte kleiner is dan een opgegeven hoeveelheid. Deze opschoning van cachebestanden is handig als uw downstreamopslag te groot wordt.
Luie symbool laden
Het standaardgedrag van de debugger is het gebruik van lui symbool laden, ook wel bekend als uitgesteld symbool laden. Dit soort laden betekent dat symbolen pas worden geladen als ze nodig zijn.
Wanneer het symboolpad wordt gewijzigd, bijvoorbeeld met behulp van de opdracht .sympath, worden alle geladen modules met exportsymbolen lui opnieuw geladen.
Symbolen van modules met volledige PDB-symbolen worden lazily opnieuw geladen als het nieuwe pad niet langer het oorspronkelijke pad bevat dat is gebruikt om de PDB-symbolen te laden. Als het nieuwe pad nog steeds het oorspronkelijke pad naar het PDB-symboolbestand bevat, worden deze symbolen niet lui opnieuw geladen.
U kunt het laden van luie symbolen in CDB en KD uitschakelen met behulp van de opdrachtregeloptie -s. U kunt het laden van symbolen ook afdwingen door de opdracht te gebruiken of door de opdracht .reload module samen met de optie /f
te gebruiken.
Azure DevOps Services-artefacten
Er is een symboolserver beschikbaar met Azure Artifacts in Azure DevOps Services. Zie Fouten opsporen met symbolen in WinDbg (Azure Artifacts)voor meer informatie over het werken met Azure Artifacts in WinDbg. Zie Overzicht van symbolen (Azure Artifacts)voor algemene informatie over door Azure gegenereerde symbolen.
Het pad naar het symbool bepalen
Als u het pad naar het symbool wilt beheren, kunt u een van de volgende methoden selecteren:
Gebruik de opdracht .symfix set symbol store path om een standaardpad naar de openbare Microsoft-symboolserver in te stellen, wat in veel situaties goed werkt. Als u een lokale cache wilt instellen, typt u
.symfix C:\MyCache
.Gebruik de opdracht .sympath om het pad weer te geven, in te stellen, te wijzigen of toe te voegen.
Voordat u het foutopsporingsprogramma start, gebruikt u de
_NT_SYMBOL_PATH
en_NT_ALT_SYMBOL_PATH
omgevingsvariabelen om het pad in te stellen. Het symboolpad wordt gemaakt door_NT_SYMBOL_PATH
toe te voegen na_NT_ALT_SYMBOL_PATH
. Normaal gesproken wordt het pad ingesteld via de_NT_SYMBOL_PATH
. Mogelijk wilt u echter_NT_ALT_SYMBOL_PATH
gebruiken om deze instellingen in speciale gevallen te overschrijven, bijvoorbeeld als u persoonlijke versies van gedeelde symboolbestanden hebt. Als u probeert een ongeldige map toe te voegen via deze omgevingsvariabelen, negeert het foutopsporingsprogramma deze map.Wanneer u het foutopsporingsprogramma start, gebruikt u de -y-opdrachtregeloptie om het pad in te stellen.
Alleen in WinDbg kunt u het commando Bestand | Symboolbestandspad gebruiken of op
CTRL+S
drukken om het pad weer te geven, in te stellen, te wijzigen of eraan toe te voegen.
Als u de opdrachtregeloptie -sinsgebruikt, negeert het foutopsporingsprogramma de omgevingsvariabele voor het symboolpad.
Probleemoplossing
Gebruik !sym luidruchtige of de -nWinDbg Command-Line Option om extra details weer te geven wanneer symbolen worden geladen. Voor aanvullende probleemoplossingsstrategieën, zie Symbolen controleren.