Freigeben über


Verwenden von SymChk

Die grundlegende Syntax für SymChk lautet wie folgt:

symchk [/r] FileNames /s SymbolPath 

FileNames gibt mindestens eine Programmdatei an, deren Symbole benötigt werden. Wenn FileNames ein Verzeichnis ist und das / r-Flag verwendet wird, wird dieses Verzeichnis rekursiv untersucht, und SymChk versucht, Symbole für alle Programmdateien in dieser Verzeichnisstruktur zu finden. SymbolPath gibt an, wo SymChk nach Symbolen suchen soll.

Es gibt viele weitere Befehlszeilenoptionen. Eine vollständige Auflistung finden Sie unter SymChk Command-Line Optionen.

Abrufen von symchk

Symchk wird wie andere Debugtools als Teil des Debuggers ausgeliefert. Weitere Informationen finden Sie unter Debugtools für Windows.

Sobald die Debugtools installiert sind, ist symchk in diesem Verzeichnis für 64-Bit-Windows verfügbar.

C:\Programme (x86)\Windows Kits\10\Debuggers\x64

Beispielverwendung

Der angegebene Symbolpfad kann eine beliebige Anzahl von lokalen Verzeichnissen, UNC-Verzeichnissen oder Symbolservern enthalten. Lokale Verzeichnisse und UNC-Verzeichnisse werden nicht rekursiv durchsucht. Es werden nur das angegebene Verzeichnis und ein Unterverzeichnis, das auf der Erweiterung der ausführbaren Datei basiert, durchsucht. Beispiel: Die Abfrage

symchk thisdriver.sys /s G:\symbols 

durchsucht G:\mysymbols und G:\mysymbols\sys.

Sie können einen Symbolserver angeben, indem Sie eine der folgenden Syntaxen als Teil Ihres Symbolpfads verwenden:

srv*DownstreamStore*\\Server\Share
srv*\\Server\Share

Dies ähnelt der Verwendung eines Symbolservers im Symbolpfad des Debuggers. Ausführliche Informationen hierzu finden Sie unter Verwenden von Symbolservern und Symbolspeichern.

Wenn ein Downstreamspeicher angegeben wird, erstellt SymChk Kopien aller gültigen Symboldateien, die vom Symbolserver gefunden wurden, und platziert sie im nachgelagerten Speicher. Nur Symboldateien, die vollständige Übereinstimmungen sind, werden nachgeschaltet.

SymChk durchsucht immer den Downstreamspeicher, bevor der Symbolserver abfragt. Daher sollten Sie bei der Verwendung eines Downstreamspeichers vorsichtig sein, wenn der Symbolspeicher von einer anderen Person gepflegt wird. Wenn Sie SymChk einmal ausführen und Symboldateien finden, werden diese in den Downstreamspeicher kopiert. Wenn Sie SymChk dann erneut ausführen, nachdem diese Dateien im Symbolspeicher geändert oder gelöscht wurden, wird SymChk diese Tatsache nicht bemerken, da es im Downstreamspeicher fündig wird und nicht weiter sucht.

Hinweis SymChk verwendet immer SymSrv (Symsrv.dll) als Symbolserver-DLL. Andererseits können die Debugger eine andere Symbolserver-DLL als SymSrv auswählen, wenn eine verfügbar ist. (SymSrv ist der Symbolserver, der im Paket Debugtools für Windows enthalten ist.)

Verwenden von SymChk zum Bestimmen, ob Symbole privat oder öffentlich sind

Um zu bestimmen, ob eine Symboldatei privat oder öffentlich ist, verwenden Sie den Parameter /v , damit SymChk ausführliche Ausgabe anzeigt. Angenommen, MyApp.exe und MyApp.pdb sich im Ordner c:\sym befinden. Geben Sie diesen Befehl ein.

symchk /v C:\sym\MyApp.exe /s C:\sym**

Wenn MyApp.pdb private Symbole enthält, sieht die Ausgabe von SymChk wie folgt aus.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - private symbols & lines
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Wenn MyApp.pdb nur öffentliche Symbole enthält, sieht die Ausgabe von SymChk wie folgt aus.

[SYMCHK] Searching for symbols to c:\sym\MyApp.exe in path c:\sym
...
DBGHELP: MyApp - public symbols
        c:\sym\MyApp.pdb
...
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Verwenden Sie die Option s mit dem / s-Parameter (/ss), um die Suche so einzuschränken, dass nur öffentliche Symboldateien gefunden werden. Der folgende Befehl findet eine Übereinstimmung, wenn MyApp.pdb nur öffentliche Symbole enthält. Es findet keine Übereinstimmung, wenn MyApp.pdb private Symbole enthält.

symchk /v C:\sym\MyApp.exe /s C:\sym

Weitere Informationen finden Sie unter Öffentliche und private Symbole.

Beispiele

Hier sehen Sie einige Beispiele: Der folgende Befehl sucht nach Symbolen für das Programm Myapp.exe:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\applications 

SYMCHK: Myapp.exe           FAILED  - Myapp.pdb is missing

SYMCHK: FAILED files = 1
SYMCHK: PASSED + IGNORED files = 0

Sie können es mit einem anderen Symbolpfad erneut versuchen:

E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Die Suche war diesmal erfolgreich. Wenn die Ausführliche Option nicht verwendet wird, listet SymChk nur Dateien auf, für die Symbole nicht gefunden werden konnten. In diesem Beispiel wurden also keine Dateien aufgeführt. Sie können feststellen, dass die Suche erfolgreich war, da jetzt eine Datei in der Kategorie "bestanden" und keine in der Kategorie "Fehler" aufgeführt ist.

Eine Programmdatei wird ignoriert, wenn sie keinen ausführbaren Code enthält. Viele Ressourcendateien sind von diesem Typ.

Wenn Sie lieber die Dateinamen aller Programmdateien anzeigen möchten, können Sie die Option /v verwenden, um ausführliche Ausgabe zu generieren:

E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory 

SYMCHK: MyApp.exe           PASSED

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

Der folgende Befehl sucht nach einer großen Anzahl von Windows-Symbolen auf einem Symbolserver. Es gibt eine Vielzahl möglicher Fehlermeldungen:

E:\debuggers> symchk /r C:\windows\system32 /s srv*\\manysymbols\windows 

SYMCHK: msisam11.dll         FAILED  - MSISAM11.pdb is missing
SYMCHK: msuni11.dll          FAILED  - msuni11link.pdb is missing
SYMCHK: msdxm.ocx            FAILED  - Image is split correctly, but msdxm.dbg i
s missing
SYMCHK: expsrv.dll           FAILED  - Checksum doesn't match with expsrv.DBG
SYMCHK: imeshare.dll         FAILED  - imeshare.opt.pdb is missing
SYMCHK: ir32_32.dll          FAILED  - Built with no debugging information
SYMCHK: author.dll           FAILED  - rpctest.pdb is missing
SYMCHK: msvcrt40.dll         FAILED  - Built with no debugging information
......
SYMCHK: FAILED files = 211
SYMCHK: PASSED + IGNORED files = 4809

Weitere Informationen

SymChk-Command-Line-Optionen

Verwenden von Symbolservern und Symbolspeichern