Ist die Dokumentation für WinDbg SRV * falsch?

8

Die Dokumentation sagt:

  

Wenn Sie die Zeichenfolge srv * in Ihren Symbolpfad einschließen, verwendet der Debugger   ein Symbolserver, um Symbole aus dem Standard-Symbolspeicher zu erhalten. Zum   Beispiel: Der folgende Befehl weist den Debugger an, ein Symbol zu verwenden   Server, um Symbole aus dem Standard-Symbolspeicher zu erhalten. Diese Symbole sind   nicht auf dem lokalen Computer zwischengespeichert .

     

.sympath srv *

Was ich jedoch gefunden habe, sind die Symbole sind zwischengespeichert.

Ich verwende WinDbg 10 und die Standard-Cache-Dateien scheinen bei C:\Program Files (x86)\Windows Kits\Debuggers\x86\sym erstellt zu werden. Wenn ich sie lösche und eine ausführbare Datei mit dem Pfad srv* starte, werden die Symbole hier heruntergeladen.

Also ist die Dokumentation falsch?

    
zar 28.06.2016, 21:05
quelle

2 Antworten

5

Ja, die Dokumentation ist falsch (zumindest für WinDbg 6.2.9200.16384).

Sie können es beweisen, indem Sie den erwähnten Befehl eingeben:

%Vor%

Also, wie wir aus der Ausgabe von WinDbg sehen können, enthält der erweiterte Symbolpfad (der tatsächlich verwendet wird) cache* , was anzeigt, dass Symbole zwischengespeichert werden.

Sie haben dies in der Dokumentation für WinDbg , die möglicherweise nicht der richtige Ort zum Definieren des Verhaltens ist, da WinDbg die Symbole nicht selbst lädt. Stattdessen verwendet es die dbghelp.dll und die Das Verhalten dieser DLL kann sich ändern, ohne dass die WinDbg-Hilfe aktualisiert wird.

Die Syntax des Symbolpfads ist wirklich schwer zu verstehen und die Dokumentation ist überall verteilt. All die Magie mit Erweiterungs- und Standardverzeichnissen macht es noch schlimmer.

Der Fluss ist mehr oder weniger:

  1. Teilen Sie den Symbolpfad bei ";" in Array -Elemente .
  2. Für jedes -Element in -Elementen :
    1. Wechseln Sie nach dem Anfang des Elements :
      1. "Cache *":
        1. Cache-Pfad ermitteln:
          1. Wenn hinter dem Stern ein Pfad vorhanden ist, verwenden Sie diesen Pfad.
            Andernfalls verwende den Standard-Cache-Pfad.
          2. Cache-Symbol von allen folgenden -Elementen s in diesem Pfad.
      2. "symsrv *":
        1. Split Element bei "*" in (meist Pfad) Komponenten.
        2. Die erste Komponente ist die zu verwendende Symbol-Server-DLL.
        3. Die nächsten Komponenten sind Pfade. Für jeden Pfad :
          1. Suchen Sie nach dem Symbol in path . Der Pfad kann einer sein
            • Lokales Verzeichnis.
            • UNC.
            • HTTP- oder HTTPS-URL - muss der letzte Pfad sein .
            • Leere Zeichenfolge - bedeutet den Standard-Symbolspeicher. (Siehe SymSetHomeDirectory und !homedir .)
          2. Wenn gefunden:
            1. Kopieren Sie das Symbol in all in das Element .
            2. Beenden Sie die Symbolsuche
      3. "srv *":
        • Wie "symsrv * symsrv.dll *".
      4. Ansonsten:
        1. Behandle das -Element als Pfad und suche dort nach dem Symbol. (Ohne den Hash usw. wie von symsrv.dll gemacht.)
Thomas Weller 28.06.2016, 21:29
quelle
1

Wenn Sie das spezielle cache*path -Token In Ihrem WinDbg-Symbolpfad speichert WinDbg Symbole aus Quellen, die diesem Token folgen. Es ist auch möglich, srv*localpath*serverpath in Cache-Symbole von serverpath in localpath zu schreiben. Wenn Sie kein Caching durchführen möchten, stellen Sie sicher, dass Ihr .sympath es nicht enthält.

Es kann sich auch lohnen, zu überprüfen, ob die Symbole effektiv zwischengespeichert (einmal abgerufen, mehrfach verwendet) oder nur für diesen WinDbg-Lauf gespeichert wurden (einmal pro Sitzung abgerufen).

    
zneak 28.06.2016 21:21
quelle

Tags und Links