Using SymSrv
SymSrv liefert Symboldateien aus zentralisierten Symbolspeichern. Diese Speicher können eine beliebige Anzahl von Symboldateien enthalten, die einer beliebigen Anzahl von Programmen oder Betriebssystemen entsprechen. Die Speicher können auch Binärdateien enthalten, die besonders beim Debuggen von Minidumpdateien nützlich sind.
Die Speicher können die eigentlichen Symbol- und Binärdateien oder einfach Zeiger auf Symboldateien enthalten. Wenn der Speicher Zeiger enthält, ruft SymSrv die tatsächlichen Dateien direkt aus ihren Quellen ab.
SymSrv kann auch einen großen Symbolspeicher in eine kleinere Teilmenge unterteilen, die für eine spezielle Debugaufgabe geeignet ist.
Schließlich kann SymSrv Symboldateien aus einer HTTP- oder HTTPS-Quelle mithilfe der vom Betriebssystem bereitgestellten Anmeldeinformationen abrufen. SymSrv unterstützt HTTPS-Websites, die durch Smartcards, Zertifikate und reguläre Anmeldungen und Kennwörter geschützt sind.
Festlegen des Symbolpfads
Wie unter Symbolpfade beschrieben, kann der Symbolpfad (_NT_SYMBOL_PATH Umgebungsvariable) aus mehreren Pfadelementen bestehen, die durch Semikolons getrennt sind. Wenn eines oder mehrere dieser Pfadelemente mit dem Text "srv*" beginnt, ist das Element ein Symbolserver und verwendet SymSrv, um Symboldateien zu suchen.
Hinweis
Wenn der Text "srv*" nicht angegeben ist, aber das eigentliche path-Element ein Symbolserverspeicher ist, verhält sich der Symbolhandler so, als ob "srv*" angegeben wäre. Der Symbolhandler nimmt diese Bestimmung vor, indem er nach dem Vorhandensein einer Datei namens "pingme.txt" im Stammverzeichnis des angegebenen Pfads sucht.
Ebenso wie Symbolpfade aus durch Semikolons getrennten Symbolpfadelementen bestehen, bestehen Symbolserver aus Symbolspeicherelementen, die durch Sternchen getrennt sind. Nach dem Präfix "srv*" können bis zu 10 Symbolspeicher vorhanden sein. Links von der Liste aufgeführte Speicher werden als Downstreamspeicher bezeichnet, und rechts von Den Stores Upstream Werden Filialen bezeichnet.
- srv\**SymbolStore* srv\**SymbolStore1*\**SymbolStoreN*
Wenn nur ein Symbolspeicherelement im Pfad enthalten ist, versucht SymSrv, die angeforderte Datei direkt aus diesem Speicher zu verwenden.
Wenn der Pfad zwei Symbolspeicher enthält, sucht SymSrv im Symbolspeicher ganz links nach der Symboldatei. Wenn die Datei vorhanden ist, wird sie verwendet. Wenn es nicht vorhanden ist, sucht SymSrv im Symbolspeicher sofort nach rechts. Wenn die Datei dort vorhanden ist, wird sie in den linken Speicher kopiert und dort geöffnet.
Wenn mehr als zwei Speicher vorhanden sind, wird dieses Verhalten nach rechts fortgesetzt, bis die Datei gefunden wird oder keine weiteren Speicher in der Liste enthalten sind.
Die Datei wird nie aus einem Speicher geöffnet, sondern aus dem am weitesten links stehenden Speicher. Wenn die Datei an einer anderen Stelle in der Kette gefunden wird, wird sie in jeden Speicher auf der linken Seite kopiert. Dieser Kopiervorgang wird als "Kaskadieren" bezeichnet und bietet bestimmte Vorteile, die später in diesem Dokument erfüllt werden.
Typen von Symbolspeichern
In der folgenden Tabelle sind Beispiele für die unterstützten Symbolspeichertypen aufgeführt.
Symbolspeichertyp | BESCHREIBUNG |
---|---|
\\server\freigabe | Ein vollqualifizierter UNC-Pfad zu einer Freigabe auf einem Remoteserver. |
c:\LocalCache | Ein Pfad zu einem Verzeichnis auf dem Clientcomputer. |
https://InternetSite | Die URL zu einer Website, auf der die Symbole gehostet werden. Muss der am weitesten rechts stehende Speicher in der Liste sein und darf nicht der einzige Speicher in der Liste sein. |
https://SecureInternetSite | Die URL zu einer sicheren Website, auf der die Symbole gehostet werden. Dies kann Kennwörter, Windows-Anmeldeinformationen, Zertifikate und Smartcards unterstützen. Muss der am weitesten rechts stehende Speicher in der Liste sein und darf nicht der einzige Speicher in der Liste sein. |
<blank> | Wenn zwischen zwei Sternchen kein Text vorhanden ist, gibt dies den Standardmäßigen Downstreamspeicher an. Der Speicherort wird durch Aufrufen von SymSetHomeDirectory festgelegt. Der Standardwert ist ein Verzeichnis namens "sym" direkt unterhalb des Programmverzeichnisses der aufrufenden Anwendung. Dies wird manchmal als lokaler Standardcache bezeichnet. |
Da ein HTTP-basierter Symbolspeicher nicht in geschrieben werden kann, muss er der rechtsste Speicher in der Liste sein. Wenn sich ein HTTP-basierter Symbolspeicher in der Mitte oder links in der Speicherliste befindet, wäre es nicht möglich, gefundene Dateien darauf zu kopieren, und die Kette wäre beschädigt. Da der Symbolhandler eine Datei von einer Website aus nicht öffnen kann, sollte ein HTTP-basierter Speicher nicht der linksste oder einzige Speicher in der Liste sein. Wenn SymSrv jemals mit diesem Symbolpfad angezeigt wird, versucht es, die Datei in den Standard-Downstreamspeicher zu kopieren und von dort aus zu öffnen, unabhängig davon, ob der Standard-Downstreamspeicher im Symbolpfad angegeben ist oder nicht.
Beispiele
Um SymSrv mit einem Symbolspeicher auf \\mybuilds\mysymbols zu verwenden, legen Sie den folgenden Symbolpfad fest:
set _NT_SYMBOL_PATH= srv*\\mybuilds\mysymbols
Um den Symbolpfad so festzulegen, dass der Debugger Symboldateien aus einem Symbolspeicher auf \\mybuilds\mysymbols in Ihr lokales Verzeichnis c:\localsymbols kopiert, verwenden Sie Folgendes:
set _NT_SYMBOL_PATH=srv*c:\localsymbols*\\mybuilds\mysymbols
Um den Symbolpfad so festzulegen, dass der Debugger Symboldateien aus einem Symbolspeicher auf \\mybuilds\mysymbols in den Standard-Downstreamspeicher (in der Regel c:\debuggers\sym) kopiert, verwenden Sie Folgendes:
set _NT_SYMBOL_PATH=srv**\\mybuilds\mysymbols
Um einen kaskadierenden Speicher zu verwenden, legen Sie den folgenden Symbolpfad fest:
set _NT_SYMBOL_PATH = srv*c:\localsymbols*\\NearbyServer\store*https://DistantServer
In diesem Beispiel sucht SymSrv zunächst nach der Datei in c:\localsymbols. Wenn sie dort gefunden wird, wird ein Pfad zur Datei zurückgegeben. Andernfalls sucht SymSrv in \\NearbyServer\store nach der Datei. Wenn sie dort gefunden wird, kopiert SymSrv die Datei nach c:\localsymbols und gibt einen Pfad zur Datei zurück. Wenn sie nicht gefunden wird, sucht SymSrv nach der Datei in https://DistantServer, und wenn sie dort gefunden wird, kopiert SymSrv die Datei nach \\NearbyServer\store und dann nach c:\localsymbols.
Dieses letzte Beispiel zeigt, wie ein vernünftiger Entwurf eines Symbolpfads verwendet werden kann, um das Herunterladen von Symbolen zu optimieren. Wenn Sie über eine Arbeitswebsite mit einer Gruppe von Debuggern verfügen und diese alle Symbole von einem entfernten Speicherort abrufen müssen, können Sie einen gemeinsamen Server mit einem Symbolspeicher in der Nähe aller Debugger einrichten. Richten Sie dann jeden Debugger mit dem obigen Symbolpfad ein. Der erste Debugger, der eine bestimmte Version von foo.pdb erfordert, lädt ihn von https://DistantServer in \\NearbyServer\store und dann auf seinen eigenen Computer in c:\localsymbols herunter. Der nächste Debugger, der dieselbe Datei erfordert, kann sie aus \\NearbyServer\store herunterladen, da er bereits vom vorherigen Debugger an diesen Speicherort heruntergeladen wurde. Dieses Zwischenspeichern mit mehreren Ebenen spart viel Zeit und Netzwerkbandbreite.
Microsoft-Symbolspeicher
Microsoft bietet Zugriff auf einen Internetsymbolserver, der Symboldateien für die vielen Versionen des Windows-Betriebssystems enthält. Dieser Katalog von Symbolen ist nicht garantiert vollständig, aber er ist umfangreich. Andere Microsoft-Produkte sind ebenfalls vertreten.
Der Internetsymbolserver wird mit einer Vielzahl von Windows-Symbolen für Microsoft Windows-Betriebssysteme aufgefüllt, einschließlich HotFixes, Service Packs, Sicherheitsrolluppakete und Einzelhandelsversionen. Symbole sind auch auf dem Server für aktuelle Betas und Release Candidates für Windows-Produkte sowie eine Vielzahl anderer Microsoft-Produkte verfügbar, z. B. Microsoft Internet Explorer.
Wenn Sie während des Debuggens Zugriff auf das Internet haben, können Sie den Debugger so konfigurieren, dass Symbole während einer Debugsitzung nach Bedarf heruntergeladen werden, anstatt Die Symboldateien vor einer Debugsitzung separat herunterzuladen. Die Symbole werden in einen von Ihnen angegebenen Verzeichnisspeicherort heruntergeladen und dann vom Debugger geladen.
Die URL für den Microsoft-Symbolspeicher lautet https://msdl.microsoft.com/download/symbols. Das folgende Beispiel zeigt, wie Sie den Debuggersymbolpfad festlegen (ersetzen Sie den Downstreamspeicherpfad durch c:\DownstreamStore):
srv*c:\DownstreamStore*https://msdl.microsoft.com/download/symbols
Komprimierte Dateien
SymSrv ist mit Symbolspeichern kompatibel, die komprimierte Dateien enthalten, sofern diese Komprimierung mit dem compress.exe-Tool vorgeformt wurde, das mit dem Windows Server 2003 Resource Kit verteilt wurde. Komprimierte Dateien sollten einen Unterstrich als letztes Zeichen in ihren Dateierweiterungen aufweisen (z. B. module1.pd_ oder module2.db_). Weitere Informationen finden Sie unter Verwenden von SymStore.
Beim Kaskadieren werden Dateien nicht dekomprimiert, es sei denn, der Zielspeicher ist der am weitesten links stehende Speicher im Pfad. Wenn nur ein Speicher im Pfad vorhanden ist und er eine komprimierte Datei enthält, kopiert SymSrv die Datei in den Standard-Downstreamspeicher und öffnet sie von dort aus, auch wenn der Standardmäßige Downstreamspeicher nicht in dem Symbolpfad angegeben ist.
DbgHelp 6.1 und früher: Wenn die Dateien im master-Speicher komprimiert sind, müssen Sie einen Downstreamspeicher verwenden. SymSrv dekomprimiert alle Dateien, bevor sie in den Downstreamspeicher kopiert werden.
Löschen des Caches
Wenn Sie einen Downstreamspeicher als Cache verwenden, können Sie dieses Verzeichnis jederzeit löschen, um Speicherplatz zu sparen.
Es ist möglich, einen großen Symbolspeicher zu haben, der Symboldateien für viele verschiedene Programme oder Windows-Versionen enthält. Wenn Sie die version von Windows aktualisieren, die auf Ihrem Zielcomputer verwendet wird, entsprechen alle zwischengespeicherten Symboldateien der früheren Version. Diese zwischengespeicherten Dateien werden nicht weiter verwendet, und daher ist dies möglicherweise ein guter Zeitpunkt, um den Cache zu löschen.
Debugtools für Windows enthält ein Hilfsprogramm namens agestore.exe, das Dateien selektiv aus einer Verzeichnisstruktur entfernt und die zuletzt verwendeten Dateien belässt. Dieses Tool ist für das Löschen nicht verwendeter Dateien aus Symbolserverspeichern konzipiert. Damit können Sie viele Optionen steuern, z. B. abgeschnittene Datums- und Verzeichnisgrößenalgorithmen.
Flat Cache-Verzeichnis
Es ist möglich, den Standard-Downstreamspeicher als flaches Verzeichnis und nicht als Standardsymbolstruktur zu deklarieren. Rufen Sie hierzu die SymSetOptions-Funktion mit SYMOPT_FLAT_DIRECTORY auf (damit wird auch die Option SSRVOPT_FLAT_DEFAULT_STORE in SymSrv festgelegt). Rufen Sie symSetHomeDirectory auf, bevor Sie dies tun. andernfalls können die Symboldateien in das Programmverzeichnis geschrieben werden.
Zeigerdateien
SymStore kann Dateien erstellen und verwenden, die auf eine Zieldatei und nicht auf die Zieldatei selbst verweisen. Wenn ein Symbolspeicher eine solche Zeigerdatei enthält, wird die Datei standardmäßig von dem in der Zeigerdatei angegebenen Speicherort in den Speicher kopiert. Um einen Speicher so zu konfigurieren, dass die Zeigerdatei anstelle der Datei kopiert wird, auf die sie verweist, erstellen Sie eine Datei mit dem Namen wantsptr.txt im Stammverzeichnis des Zielspeichers. Der Inhalt von wantsptr.txt ist nicht wichtig, nur das Vorhandensein der Datei.
Ausschließen von Dateien aus der Symbolliste
Um Dateien aus einer Symbolsuche auszuschließen, können Sie deren Namen in symsrv.ini oder in der Registrierung angeben. Um die Dateien in symsrv.ini anzugeben, erstellen Sie einen Abschnitt mit dem Namen Ausschlüsse, und listen Sie die Dateien auf. Die Dateinamen können Wie im folgenden Beispiel gezeigt, Können Die Dateinamen können Wildcards enthalten:
[Exclusions]
dbghelp.pdb
symsrv.*
mso*
Symsrv.ini sollte sich im selben Verzeichnis befinden, in dem sich symsrv.dll befindet. In den meisten Installationen ist die Datei nicht vorhanden, und Sie müssen eine neue Datei erstellen.
Alternativ können Sie die auszuschließenden Dateien in der Registrierung speichern. Erstellen Sie den folgenden Registrierungsschlüssel: HKEY_LOCAL_MACHINE\Software\Microsoft\Symbol Server\Exclusions. Speichern Sie jeden Dateinamen als Zeichenfolgenwert (REG_SZ) in diesem Schlüssel. Der Name des Zeichenfolgenwerts gibt den Namen der auszuschließenden Datei an. Sie können den Inhalt des Zeichenfolgenwerts verwenden, um einen Kommentar zu speichern, der beschreibt, warum die Datei ausgeschlossen wird.
Installation
Der SymSrv-Symbolserver (symsrv.dll) ist im Paket Debugtools für Windows enthalten. Es muss im selben Verzeichnis wie die Kopie von dbghelp.dll installiert werden, die Sie laden. Weitere Informationen finden Sie unter Aufrufen der DbgHelp-Bibliothek.