Symbolpfad für Windows-Debugger
Der Symbolpfad gibt Orte an, an denen Windows-Debugger wie WinDbg, KD, CDB und NTST nach Symboldateien suchen. Weitere Informationen zu Symbolen und Symboldateien finden Sie unter Symbole.
Einige Compiler, einschließlich Microsoft Visual Studio, legen Symboldateien im selben Verzeichnis wie die Binärdateien ab. Die Symboldateien und die aktivierten Binärdateien enthalten Pfad- und Dateinameninformationen, sodass der Debugger die Symboldateien automatisch finden kann. Wenn Sie einen Benutzermodusprozess auf dem Computer debuggen, auf dem die ausführbare Datei erstellt wurde, und wenn sich die Symboldateien an ihrem ursprünglichen Speicherort befinden, kann der Debugger die Symboldateien suchen, ohne dass Sie den Symbolpfad festlegen.
In den meisten anderen Situationen müssen Sie den Symbolpfad so festlegen, dass er auf die Speicherorte der Symboldatei verweist.
Tipp
Verwenden Sie SYMFIX , um einen Standardpfad zum öffentlichen Microsoft-Symbolserver festzulegen, der in vielen Situationen gut funktioniert.
Syntax des Symbolpfads
Der Symbolpfad des Debuggers ist eine Zeichenfolge, die aus mehreren Verzeichnispfaden besteht, die durch Semikolons getrennt sind. Beispiel: C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB
.
Relative Pfade werden unterstützt. Sie sollten jedoch vor jedem Pfad einen Laufwerkbuchstaben oder eine Netzwerkfreigabe hinzufügen, es sei denn, Sie starten den Debugger immer aus demselben Verzeichnis. Netzwerkfreigaben werden ebenfalls unterstützt.
Für jedes Verzeichnis im Symbolpfad sucht der Debugger in drei Verzeichnissen. Wenn der Symbolpfad beispielsweise enthält C:\Dir1
und der Debugger nach Symbolinformationen für eine DLL sucht, sucht der Debugger nach Symbolinformationen in den folgenden Verzeichnissen, die in der Reihenfolge aufgeführt sind:
C:\Dir1\symbols\dll
C:\Dir1\dll
C:\Dir1
Der Debugger wiederholt diesen Vorgang dann für jedes Verzeichnis im Symbolpfad. Schließlich sucht der Debugger im aktuellen Verzeichnis und dann im aktuellen Verzeichnis mit ..\dll
angefügtem Verzeichnis. Der Debugger fügt ..\dll
, ..\exe
oder ..\sys
an, je nachdem, welche Binärdateien er debuggen.
Symboldateien verfügen über Datums- und Zeitstempel. Der Debugger sucht immer nach den Symbolen, die dem Zeitstempel für die Binärdateien entsprechen, die er debuggen soll. Sie müssen sich keine Sorgen machen, dass der Debugger die falschen Symbole verwendet, die er zuerst in dieser Sequenz findet. Weitere Informationen zu Antworten, wenn keine Symboldateien verfügbar sind, finden Sie unter Übereinstimmende Symbolnamen.
Eine Möglichkeit, den Symbolpfad festzulegen, besteht darin, den Befehl .sympath einzugeben. Weitere Möglichkeiten zum Festlegen des Symbolpfads finden Sie weiter unten in diesem Thema unter Steuern des Symbolpfads .
Lokales Zwischenspeichern von Symbolen
Sie sollten Ihre Symbole lokal zwischenspeichern. Eine Möglichkeit, Symbole lokal zwischenzuspeichern, besteht darin, den Symbolpfad einzuschließen oder cache*localsymbolcache;*
in diesen einzuschließencache*;
.
Wenn Sie die Zeichenfolge cache*;
in Ihren Symbolpfad einschließen, werden Symbole, die aus einem beliebigen Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Standardverzeichnis des Symbolcaches auf dem lokalen Computer gespeichert. Der folgende Befehl weist den Debugger beispielsweise an, Symbole aus der Netzwerkfreigabe namens \\someshare
abzurufen und die Symbole am Standardspeicherort auf dem lokalen Computer zwischenzuspeichern.
.sympath cache*;\\someshare
Wenn Sie die Zeichenfolge cache*localsymbolcache;
in Ihren Symbolpfad einschließen, werden Symbole, die aus einem beliebigen Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Verzeichnis localsymbolcache gespeichert.
Der folgende Befehl weist den Debugger beispielsweise an, Symbole aus der Netzwerkfreigabe \\someshare
abzurufen und die Symbole im c:\MySymbols
Verzeichnis zwischenzuspeichern.
.sympath cache*C:\MySymbols;\\someshare
Verwenden eines Symbolservers: srv*
Wenn Sie mit dem Internet oder einem Unternehmensnetzwerk verbunden sind, können Sie am effizientesten auf Symbole zugreifen, wenn Sie einen Symbolserver wie den öffentlichen öffentlichen Microsoft-Symbolserver verwenden. Sie können einen Symbolserver verwenden, indem Sie eine der folgenden Zeichenfolgen in Ihrem Symbolpfad verwenden.
Die
srv*
ZeichenfolgeWenn Sie die Zeichenfolge
srv*
in Ihren Symbolpfad einschließen, verwendet der Debugger einen Symbolserver, um Symbole aus dem Standardsymbolspeicher abzurufen. Der folgende Befehl weist den Debugger beispielsweise an, Symbole aus dem Standardsymbolspeicher abzurufen. Diese Symbole werden nicht auf dem lokalen Computer zwischengespeichert..sympath srv*
Die
srv*symbolstore
ZeichenfolgeWenn Sie die Zeichenfolge
srv*symbolstore
in Ihren Symbolpfad einschließen, verwendet der Debugger einen Symbolserver, um Symbole aus dem Symbolspeicher abzurufen. Der folgende Befehl weist den Debugger beispielsweise an, Symbole aus dem Microsoft-Symbolserverspeicher abzurufen. Diese Symbole werden nicht auf dem lokalen Computer zwischengespeichert..sympath srv*https://msdl.microsoft.com/download/symbols
Die
srv*localsymbolcache*symbolstore
ZeichenfolgeWenn Sie die Zeichenfolge
srv*localcache*symbolstore
in Ihren Symbolpfad einschließen, verwendet der Debugger einen Symbolserver, um Symbole aus dem Symbolspeicher abzurufen und sie im Verzeichnis localcache zwischenzuspeichern . Der folgende Befehl weist den Debugger beispielsweise an, Symbole vom Microsoft-Symbolserverhttps://msdl.microsoft.com/download/symbols
abzurufen und die Symbole inc:\MyServerSymbols
zwischenzuspeichern..sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Wenn Sie auf Ihrem Computer über ein Verzeichnis verfügen, in dem Sie Symbole manuell platzieren, verwenden Sie dieses Verzeichnis nicht als Cache für Symbole, die von einem Symbolserver abgerufen wurden. Verwenden Sie stattdessen zwei separate Verzeichnisse. Beispielsweise können Sie Symbole manuell in c:\MyRegularSymbols
platzieren und dann als Cache für symbole festlegen c:\MyServerSymbols
, die von einem Server abgerufen wurden. Das folgende Beispiel zeigt, wie Sie beide Verzeichnisse in Ihrem Symbolpfad angeben.
.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Weitere Informationen zu Symbolservern und Symbolspeichern finden Sie unter Benutzerdefinierte Symbolspeicher und Symbolserver.
Kombinieren von Cache* und srv*
Wenn Sie die Zeichenfolge cache*;
in Ihren Symbolpfad einschließen, werden Symbole, die aus einem beliebigen Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Standardverzeichnis des Symbolcaches auf dem lokalen Computer gespeichert. Der folgende Befehl weist den Debugger beispielsweise an, Symbole aus dem Microsoft-Symbolserver zu speichern und im Standardverzeichnis des Symbolcaches zwischenzuspeichern.
.sympath cache*;srv*https://msdl.microsoft.com/download/symbols
Wenn Sie die Zeichenfolge cache*localsymbolcache;
in Ihren Symbolpfad einschließen, werden Symbole, die aus einem beliebigen Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Verzeichnis localsymbolcache gespeichert.
Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole vom Microsoft-Symbolserver zu speichern und im c:\MySymbols
Verzeichnis zwischenzuspeichern.
.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols
Verwenden von AgeStore zum Reduzieren der Cachegröße
Sie können das AgeStore-Tool verwenden, um zwischengespeicherte Dateien zu löschen, die älter als ein angegebenes Datum sind, oder um genügend alte Dateien zu löschen, sodass die resultierende Cachegröße kleiner als eine angegebene Menge ist. Diese Bereinigung von Cachedateien ist nützlich, wenn Ihr Nachgelagerter Speicher zu groß wird.
Verzögertes Laden von Symbolen
Das Standardverhalten des Debuggers besteht darin, das verzögerte Laden von Symbolen zu verwenden, auch als verzögertes Laden von Symbolen bezeichnet. Diese Art des Ladens bedeutet, dass Symbole erst geladen werden, wenn sie erforderlich sind.
Wenn der Symbolpfad geändert wird, z. B. mithilfe des Befehls .sympath, werden alle geladenen Module mit Exportsymbolen langsam neu geladen.
Symbole von Modulen mit vollständigen PDB-Symbolen werden lazily neu geladen, wenn der neue Pfad nicht mehr den ursprünglichen Pfad enthält, der zum Laden der PDB-Symbole verwendet wurde. Wenn der neue Pfad weiterhin den ursprünglichen Pfad zur PDB-Symboldatei enthält, werden diese Symbole nicht faul neu geladen.
Sie können das Laden von lazy-Symbolen in CDB und KD deaktivieren, indem Sie die Befehlszeilenoption -s verwenden. Sie können das Laden von Symbolen auch erzwingen, indem Sie den Befehl ld load symbols verwenden oder den Befehl .reload module zusammen mit der /f
Option verwenden.
Azure DevOps Services Artefakte
Ein Symbolserver ist mit Azure Artifacts in Azure DevOps Services verfügbar. Informationen zum Arbeiten mit Azure-Artefakten in WinDbg finden Sie unter Debuggen mit Symbolen in WinDbg. Allgemeine Informationen zu von Azure generierten Symbolen finden Sie unter Übersicht über Symbole.
Steuern des Symbolpfads
Um den Symbolpfad zu steuern, können Sie eine der folgenden Methoden auswählen:
Verwenden Sie den Befehl .symfix set symbol store path , um einen Standardpfad zum öffentlichen Microsoft-Symbolserver festzulegen, der in vielen Situationen gut funktioniert. Um einen lokalen Cache festzulegen, geben Sie einfach ein
.symfix C:\MyCache
.Verwenden Sie den Sympath-Befehl , um den Pfad anzuzeigen, festzulegen, zu ändern oder anzufügen.
Bevor Sie den Debugger starten, verwenden Sie die Umgebungsvariablen
_NT_SYMBOL_PATH
und_NT_ALT_SYMBOL_PATH
, um den Pfad festzulegen. Der Symbolpfad wird erstellt, indem nach_NT_ALT_SYMBOL_PATH
angefügt_NT_SYMBOL_PATH
wird. In der Regel wird der Pfad über festgelegt_NT_SYMBOL_PATH
. Sie können_NT_ALT_SYMBOL_PATH
diese Einstellungen jedoch in besonderen Fällen überschreiben, z. B. wenn Sie private Versionen von freigegebenen Symboldateien haben. Wenn Sie versuchen, über diese Umgebungsvariablen ein ungültiges Verzeichnis hinzuzufügen, ignoriert der Debugger dieses Verzeichnis.Wenn Sie den Debugger starten, verwenden Sie die Befehlszeilenoption -y , um den Pfad festzulegen.
Nur in WinDbg können Sie die Datei | Symboldateipfad, oder drücken Sie
CTRL+S
, um den Pfad anzuzeigen, festzulegen, zu ändern oder an den Pfad anzufügen.
Wenn Sie die Befehlszeilenoption -sins verwenden, ignoriert der Debugger die Umgebungsvariable des Symbolpfads.
Problembehandlung
Verwenden Sie !sym noisy oder die Option -nWinDbg Command-Line , um zusätzliche Details anzuzeigen, wenn Symbole geladen werden. Weitere Strategien zur Problembehandlung finden Sie unter Überprüfen von Symbolen.
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für