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 zu dem öffentlichen Microsoft-Symbolserver festzulegen, der in vielen Situationen gut geeignet ist.

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 C:\Dir1 enthält 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, dem ..\dll angefügt ist. Der Debugger fügt ..\dll, ..\exeoder ..\sysan, je nachdem, welche Binärdateien sie debuggen.

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 Sorgen machen, dass der Debugger die falschen Symbole verwendet, die er zuerst in dieser Reihenfolge findet. Weitere Informationen zu möglichen Antworten, wenn Symboldateien nicht verfügbar sind, finden Sie unter Übereinstimmende Symbolnamen.

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

Speichere Symbole lokal ab

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

Wenn Sie die Zeichenfolge cache*; in den Symbolpfad einfügen, werden Symbole, die von jedem Element geladen werden, das rechts neben dieser Zeichenfolge erscheint, im Standard-Symbolcache-Verzeichnis auf dem lokalen Computer gespeichert. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole aus der Netzwerkfreigabe namens \\someshare abzurufen und die Symbole im Standardspeicherort auf dem lokalen Computer zwischenzuspeichern.

.sympath cache*;\\someshare

Wenn Sie die Zeichenfolge cache*localsymbolcache; im Symbolpfad einschließen, werden Symbole, die von jedem Element geladen werden, das rechts von dieser Zeichenfolge steht, im Verzeichnis localsymbolcache gespeichert.

Mit dem folgenden Befehl wird der Debugger beispielsweise angewiesen, Symbole aus der Netzwerkfreigabe \\someshare abzurufen und die Symbole im Verzeichnis c:\MySymbols zwischenzuspeichern.

.sympath cache*C:\MySymbols;\\someshare

Verwendung 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 Public Symbol Serverzu verwenden. Sie können einen Symbolserver verwenden, indem Sie eine der folgenden Zeichenfolgen im Symbolpfad verwenden.

  • Die Zeichenfolge srv*

    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 Zeichenfolge srv*symbolstore

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

    .sympath srv*https://msdl.microsoft.com/download/symbols
    
  • Die Zeichenfolge srv*localsymbolcache*symbolstore

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

    .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. Beispielsweise können Sie Symbole manuell in c:\MyRegularSymbols platzieren und dann c:\MyServerSymbols als Cache für Symbole festlegen, 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 von dieser Zeichenfolge angezeigt wird, im Standard-Symbolcache-Verzeichnis auf dem lokalen Computer gespeichert. Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole aus dem Speicher des Microsoft-Symbolservers abzurufen und im Standardsymbolcache-Verzeichnis zwischenzuspeichern.

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

Wenn Sie die Zeichenfolge cache*localsymbolcache; in den Symbolpfad einschließen, werden Symbole, die aus jedem Element geladen werden, das rechts neben dieser Zeichenfolge erscheint, im localsymbolcache Verzeichnis gespeichert.

Mit dem folgenden Befehl wird der Debugger beispielsweise aufgefordert, Symbole aus dem Speicher des Microsoft-Symbolservers abzurufen und 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 tool AgeStore 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.

Langsames Laden von Symbolen

Das Standardverhalten des Debuggers besteht im langsamen Laden von Symbolen, 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 verzögert neu geladen.

Symbole von Modulen mit vollständigen PDB-Symbolen werden langsam 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 den ursprünglichen Pfad zur PDB-Symboldatei enthält, werden diese Symbole nicht langsam neu geladen.

Sie können das langsame Laden von 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 oder den Befehl .reload module zusammen mit der Option /f verwenden.

Azure DevOps Services-Artefakte

Für Azure Artifacts in Azure DevOps Services ist ein Symbolserver verfügbar. Weitere Informationen zur Arbeit mit Azure Artifacts in WinDbg finden Sie unter Debuggen mit Symbolen in WinDbg (Azure Artifacts). Allgemeine Informationen zu von Azure generierten Symbolen finden Sie unter Symbolübersicht (Azure Artifacts).

Festlegen 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 standardmäßigen Pfad zum öffentlichen Microsoft-Symbolserver festzulegen, der in vielen Situationen gut funktioniert. Um einen lokalen Cache festzulegen, geben Sie einfach .symfix C:\MyCacheein.

  • Mit dem Befehl .sympath können Sie den Pfad anzeigen, festlegen, ändern oder dem Pfad etwas anfügen.

  • Bevor Sie den Debugger starten, verwenden Sie die _NT_SYMBOL_PATH- und _NT_ALT_SYMBOL_PATHUmgebungsvariablen, um den Pfad festzulegen. Der Symbolpfad wird erstellt, indem _NT_SYMBOL_PATH an _NT_ALT_SYMBOL_PATHangefügt wird. Normalerweise wird der Pfad über _NT_SYMBOL_PATH festgelegt. Möglicherweise möchten Sie jedoch _NT_ALT_SYMBOL_PATH verwenden, um diese Einstellungen in speziellen Fällen außer Kraft zu 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 den Befehl File | Symbol File Path verwenden oder CTRL+S drücken, um den Pfad anzuzeigen, festzulegen, zu ändern oder dem Pfad etwas anzufügen.

Wenn Sie die Befehlszeilenoption -sins verwenden, ignoriert der Debugger die Umgebungsvariable für den Symbolpfad.

Fehlerbehebung

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

Weitere Informationen

Symbole

Erweiterte SymSrv-Verwendung

Befehl .sympath

.symfix