Udostępnij przez


Korzystanie z narzędzia SymChk

Podstawowa składnia SymChk jest następująca:

symchk [/r] FileNames /s SymbolPath 

FileNames określa co najmniej jeden plik programu, którego symbole są potrzebne. Jeśli fileNames jest katalogiem, a / r flaga jest używana, ten katalog jest eksplorowany rekursywnie, a SymChk spróbuje znaleźć symbole dla wszystkich plików programów w tym drzewie katalogów. SymbolPath określa, gdzie SymChk ma wyszukiwać symbole.

Istnieje wiele innych opcji wiersza polecenia. Aby zapoznać się z pełną listą, zobacz SymChk Command-Line Options (Opcje Command-Line SymChk).

Uzyskiwanie symchk

Symchk, podobnie jak inne narzędzia debugowania, jest dostarczany jako część debugera. Aby uzyskać więcej informacji, zobacz narzędzia debugowania dla systemu Windows.

Po zainstalowaniu narzędzi debugowania symchk jest dostępny w tym katalogu dla 64-bitowego systemu Windows.

C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

Przykładowe użycie

Określona ścieżka symboli może zawierać dowolną liczbę katalogów lokalnych, katalogów UNC lub serwerów symboli. Katalogi lokalne i katalogi UNC nie są przeszukiwane rekursywnie. Przeszukiwane są tylko określony katalog i podkatalog na podstawie rozszerzenia pliku wykonywalnego. Na przykład zapytanie

symchk thisdriver.sys /s G:\symbols 

Wyszuka G:\mysymbols i G:\mysymbols\sys.

Serwer symboli można określić przy użyciu jednej z następujących składni w ramach ścieżki symboli:

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

Jest to bardzo podobne do używania serwera symboli w ścieżce symboli debugera. Aby uzyskać szczegółowe informacje na ten temat, zobacz Using Symbol Servers and Symbol Stores (Używanie serwerów symboli i magazynów symboli).

Jeśli zostanie określony magazyn podrzędny, SymChk utworzy kopie wszystkich prawidłowych plików symboli znalezionych przez serwer symboli i umieści je w magazynie podrzędnym. Tylko pliki symboli, które są całkowicie zgodne, są kopiowane na dalszym etapie.

SymChk zawsze wyszukuje magazyn podrzędny przed wysłaniem zapytania do serwera symboli. Dlatego należy zachować ostrożność przy użyciu magazynu podrzędnego, gdy ktoś inny utrzymuje magazyn symboli. Jeśli raz uruchomisz program SymChk i znajdzie pliki symboli, skopiuje je do magazynu podrzędnego. Jeśli następnie ponownie uruchomisz SymChk po zmianie lub usunięciu tych plików w magazynie symboli, SymChk nie zauważy tego faktu, ponieważ znajdzie to, czego szuka w magazynie podrzędnym i nie będzie dalej szukać.

Uwaga SymChk zawsze używa biblioteki DLL SymSrv (Symsrv.dll) jako serwera symboli. Z drugiej strony debugery mogą wybrać bibliotekę DLL serwera symboli inną niż SymSrv, jeśli jest dostępna. (SymSrv to serwer symboli zawarty w pakiecie Narzędzia debugowania dla systemu Windows).

Używanie narzędzia SymChk do określenia, czy symbole są prywatne, czy publiczne

Aby określić, czy plik symboli jest prywatny, czy publiczny, użyj parametru /v, aby SymChk wyświetlał szczegółowy wynik. Załóżmy, że MyApp.exe i MyApp.pdb znajdują się w folderze c:\sym. Wprowadź to polecenie.

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

Jeśli plik MyApp.pdb zawiera prywatne symbole, dane wyjściowe SymChk wyglądają następująco.

[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

Jeśli plik MyApp.pdb zawiera tylko symbole publiczne, dane wyjściowe SymChk wyglądają następująco.

[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

Aby ograniczyć wyszukiwanie tak, aby znaleźć tylko publiczne pliki symboli, użyj opcji s z /s parametru (/ss). Następujące polecenie wyszukuje dopasowanie, jeśli plik MyApp.pdb zawiera tylko symbole publiczne. Nie można odnaleźć dopasowania, jeśli plik MyApp.pdb zawiera symbole prywatne.

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

Aby uzyskać więcej informacji, zobacz Publiczne i prywatne symbole.

przykłady

Oto kilka przykładów. Następujące polecenie wyszukuje symbole dla programu 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

Możesz spróbować ponownie przy użyciu innej ścieżki symboli:

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

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

Wyszukiwanie zakończyło się tym razem pomyślnie. Jeśli nie jest używana opcja szczegółowa, SymChk wyświetli tylko pliki, dla których nie udało się znaleźć symboli. W tym przykładzie nie wymieniono żadnych plików. Możesz stwierdzić, że wyszukiwanie zakończyło się pomyślnie, ponieważ istnieje teraz jeden plik wymieniony w kategorii "passed" i brak w kategorii "niepowodzenie".

Plik programu jest ignorowany, jeśli nie zawiera kodu wykonywalnego. Wiele plików zasobów jest tego typu.

Jeśli wolisz wyświetlić nazwy plików wszystkich plików programu, możesz użyć opcji /v , aby wygenerować pełne dane wyjściowe:

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

SYMCHK: MyApp.exe           PASSED

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

Następujące polecenie wyszukuje ogromną liczbę symboli systemu Windows na serwerze symboli. Istnieje wiele różnych możliwych komunikatów o błędach:

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

Zobacz też

Opcje Command-Line SymChk

Używanie serwerów symboli i magazynów symboli