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, ..\exeoder ..\sysan, 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* Zeichenfolge

    Wenn 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 Zeichenfolge

    Wenn 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 Zeichenfolge

    Wenn 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 in c:\MyServerSymbolszwischenzuspeichern.

    .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_PATHangefü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

Symbols

Erweiterte SymSrv-Verwendung

Befehl ".sympath"

SYMFIX