Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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