Freigeben über


Symbolpfad für Windows-Debugger

Der Symbolpfad gibt Speicherorte 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, platzieren Symboldateien im selben Verzeichnis wie die Binärdateien. Die Symboldateien und die überprüften Binärdateien enthalten Pfad- und Dateinameninformationen, mit denen der Debugger die Symboldateien automatisch finden kann. Wenn Sie einen Benutzermodusprozess auf dem Computer debuggen, auf dem die ausführbare Datei erstellt wurde und sich die Symboldateien an ihrem ursprünglichen Speicherort befinden, kann der Debugger die Symboldateien finden, ohne den Symbolpfad festzulegen.

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 beispielsweise der Symbolpfad 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 Prozess dann für jedes Verzeichnis im Symbolpfad. Schließlich sucht der Debugger im aktuellen Verzeichnis und dann im aktuellen Verzeichnis, ..\dll an das er angefügt wurde. Der Debugger hängt, ..\exe..\sysje nachdem, welche Binärdateien sie debuggen, an..\dll.

Symboldateien weisen Datums- und Zeitstempel auf. Der Debugger sucht immer nach den Symbolen, die dem Zeitstempel der binärdateien entsprechen, die sie debuggen. Sie müssen sich keine Gedanken über den Debugger machen, indem Sie die falschen Symbole verwenden, die er zuerst in dieser Sequenz findet. Weitere Informationen zu Antworten, wenn Symboldateien nicht verfügbar sind, finden Sie unter Übereinstimmende Symbolnamen.

Eine Möglichkeit zum Festlegen des Symbolpfads besteht darin, den Sympath-Befehl einzugeben. Weitere Möglichkeiten zum Festlegen des Symbolpfads finden Sie unter Steuern des Symbolpfads weiter unten in diesem Thema.

Cachesymbole lokal

Sie sollten Ihre Symbole lokal zwischenspeichern. Eine Möglichkeit, Symbole lokal zwischenzuspeichern, besteht darin, den Symbolpfad einzuschließen oder cache*localsymbolcache;* zu speicherncache*;.

Wenn Sie die Zeichenfolge cache*; in Den Symbolpfad einfügen, werden symbole, die von jedem Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Standardsymbolcacheverzeichnis auf dem lokalen Computer gespeichert. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, 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 den Symbolpfad einfügen, werden symbole, die von jedem Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Verzeichnis "localsymbolcache " gespeichert.

Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, 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, besteht die effizienteste Möglichkeit für den Zugriff auf Symbole darin, einen Symbolserver wie den öffentlichen Microsoft-Symbolserver zu verwenden. Sie können einen Symbolserver verwenden, indem Sie eine der folgenden Zeichenfolgen im Symbolpfad verwenden.

  • Die srv* Zeichenfolge

    Wenn Sie die Zeichenfolge srv* in den Symbolpfad einschließen, verwendet der Debugger einen Symbolserver, um Symbole aus dem Standardsymbolspeicher abzurufen. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole aus dem Standardsymbolspeicher abzurufen. Diese Symbole werden nicht auf dem lokalen Computer zwischengespeichert.

    .sympath srv*
    
  • Die srv*symbolstore Zeichenfolge

    Wenn Sie die Zeichenfolge srv*symbolstore in den Symbolpfad einschließen, verwendet der Debugger einen Symbolserver, um Symbole aus dem Symbolspeicher abzurufen. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, 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 Zeichenfolge

    Wenn Sie die Zeichenfolge srv*localcache*symbolstore in den Symbolpfad einschließen, verwendet der Debugger einen Symbolserver, um Symbole aus dem Symbolspeicher abzurufen und sie im LokalenCache-Verzeichnis zwischenzuspeichern. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole vom Microsoft-Symbolserver abzurufen undhttps://msdl.microsoft.com/download/symbols die Symbole zwischenzuspeichern.c:\MyServerSymbols

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

Wenn Sie über ein Verzeichnis auf Ihrem Computer verfügen, auf dem Sie Symbole manuell platzieren, verwenden Sie dieses Verzeichnis nicht als Cache für Symbole, die von einem Symbolserver abgerufen werden. Verwenden Sie stattdessen zwei separate Verzeichnisse. Sie können z. B. Symbole c:\MyRegularSymbols manuell platzieren und dann als Cache für Symbole festlegen c:\MyServerSymbols , die von einem Server abgerufen werden. Das folgende Beispiel zeigt, wie beide Verzeichnisse in Ihrem Symbolpfad angegeben werden.

.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 Den Symbolpfad einfügen, werden symbole, die von jedem Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Standardsymbolcacheverzeichnis auf dem lokalen Computer gespeichert. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole aus dem Microsoft-Symbolserverspeicher abzurufen und sie im Standardsymbolcacheverzeichnis zwischenzuspeichern.

.sympath cache*;srv*https://msdl.microsoft.com/download/symbols

Wenn Sie die Zeichenfolge cache*localsymbolcache; in den Symbolpfad einfügen, werden symbole, die von jedem Element geladen werden, das rechts neben dieser Zeichenfolge angezeigt wird, im Verzeichnis "localsymbolcache " gespeichert.

Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole aus dem Microsoft-Symbolserverspeicher abzurufen und die Symbole im c:\MySymbols Verzeichnis zwischenzuspeichern.

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

Verwenden von AgeStore zum Verringern 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 downstreamer Speicher zu groß wird.

Lazy symbol loading

Das Standardverhalten des Debuggers besteht darin, das Laden von faulen 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 lazily reloaded.

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 lazily neu geladen.

Sie können das Laden von faulen Symbolen in CDB und KD deaktivieren, indem Sie die Befehlszeilenoption -s verwenden. Sie können auch das Laden von Symbolen erzwingen, indem Sie den Befehl "ld load symbols" 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 Artifacts in WinDbg finden Sie unter Debuggen mit Symbolen in WinDbg. Allgemeine Informationen zu von Azure generierten Symbolen finden Sie in der Übersicht über Symbole.

Steuern des Symbolpfads

Zum Steuern des Symbolpfads 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 _NT_SYMBOL_PATH Variablen und _NT_ALT_SYMBOL_PATH Umgebungsvariablen , um den Pfad festzulegen. Der Symbolpfad wird durch Anfügen _NT_SYMBOL_PATH nach _NT_ALT_SYMBOL_PATH. In der Regel wird der Pfad durch die _NT_SYMBOL_PATH. Möglicherweise möchten _NT_ALT_SYMBOL_PATH Sie diese Einstellungen jedoch in speziellen Fällen außer Kraft setzen, z. B. wenn Sie über private Versionen von freigegebenen Symboldateien verfügen. Wenn Sie versuchen, ein ungültiges Verzeichnis über diese Umgebungsvariablen 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 | Befehl 'Dateipfadsymbol' oder 'Drücken CTRL+S ', um den Pfad anzuzeigen, festzulegen, zu ändern oder anzufügen.

Wenn Sie die Befehlszeilenoption "-sins" verwenden, ignoriert der Debugger die Umgebungsvariable des Symbolpfads.

Problembehandlung

Verwenden Sie !sym laut oder die WinDbg-Befehlszeilenoption, um zusätzliche Details anzuzeigen, wenn Symbole geladen werden. Weitere Problembehandlungsstrategien finden Sie unter Überprüfen von Symbolen.

Weitere Informationen

Symbols

Erweiterte SymSrv-Verwendung

.sympath-Befehl

.symfix