Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Базовый синтаксис для SymChk выглядит следующим образом:
symchk [/r] FileNames /s SymbolPath
FileNames указывает один или несколько программных файлов, символы которых необходимы. Если FileNames является каталогом и используется флаг /r , этот каталог изучается рекурсивно, и SymChk попытается найти символы для всех программных файлов в этом дереве каталогов. SymbolPath указывает, где SymChk будет искать символы.
Существует множество других параметров командной строки. Полный список см. в разделе Параметры Command-Line SymChk.
Получение символа
Symchk, как и другие средства отладки, поставляется в составе отладчика. Дополнительные сведения см. в разделе Debugging Tools for Windows (на английском языке).
После установки средств отладки в этом каталоге для 64-разрядной версии Windows будет доступна функция symchk.
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
Example Usage (Пример использования)
Указанный путь к символам может включать любое количество локальных каталогов, UNC-каталогов или серверов символов. Локальные каталоги и каталоги UNC не выполняются рекурсивно. Выполняется поиск только в указанном каталоге и подкаталоге на основе расширения исполняемого файла. Например, запрос
symchk thisdriver.sys /s G:\symbols
выполняет поиск g:\mysymbols и G:\mysymbols\sys.
Сервер символов можно указать с помощью любого из следующих синтаксисов в качестве части пути к символам:
srv*DownstreamStore*\\Server\Share
srv*\\Server\Share
Это очень похоже на использование сервера символов в пути к символам отладчика. Дополнительные сведения см. в разделе Использование серверов символов и хранилищ символов.
Если указано подчиненное хранилище, SymChk создаст копии всех допустимых файлов символов, найденных сервером символов, и поместит их в нижестоящее хранилище. Ниже копируются только файлы символов, которые являются полными совпадениями.
SymChk всегда выполняет поиск в подчиненном хранилище перед выполнением запроса к серверу символов. Поэтому следует соблюдать осторожность при использовании нижестоящего хранилища, когда кто-то другой поддерживает хранилище символов. Если вы запустите SymChk один раз и найдете файлы символов, они будут скопированы в нижестоящее хранилище. Если вы снова запустите SymChk после того, как эти файлы были изменены или удалены в хранилище символов, SymChk не заметит этот факт, так как он найдет то, что ищет, в нижестоящем хранилище и не будет искать больше.
Примечание SymChk всегда использует SymSrv (Symsrv.dll) в качестве библиотеки DLL сервера символов. С другой стороны, отладчики могут выбрать библиотеку DLL сервера символов, отличаемую от SymSrv, если она доступна. (SymSrv — это сервер символов, включенный в пакет средств отладки для Windows.)
Использование SymChk для определения того, являются ли символы частными или общедоступными
Чтобы определить, является ли файл символов частным или общедоступным, используйте параметр /v , чтобы В SymChk отображались подробные выходные данные. Предположим, MyApp.exe и MyApp.pdb находятся в папке c:\sym. Введите эту команду.
symchk /v C:\sym\MyApp.exe /s C:\sym**
Если MyApp.pdb содержит закрытые символы, выходные данные SymChk выглядят следующим образом.
[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
Если MyApp.pdb содержит только открытые символы, выходные данные SymChk выглядят следующим образом.
[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
Чтобы ограничить поиск и найти только открытые файлы символов, используйте параметр s с параметром /s (/ss). Следующая команда находит совпадение, если MyApp.pdb содержит только открытые символы. Он не находит совпадение, если MyApp.pdb содержит закрытые символы.
symchk /v C:\sym\MyApp.exe /s C:\sym
Дополнительные сведения см. в разделе Общедоступные и закрытые символы.
Примеры
Рассмотрим некоторые примеры. Следующая команда ищет символы для 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
Вы можете повторить попытку, используя другой путь к символам:
E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
На этот раз поиск был успешным. Если параметр verbose не используется, SymChk будет перечислять только файлы, для которых не удалось найти символы. Таким образом, в этом примере файлы не были перечислены. Вы можете сказать, что поиск выполнен успешно, так как в категории "передано" указан один файл, а в категории "сбой" — ни один.
Программный файл игнорируется, если он не содержит исполняемого кода. Многие файлы ресурсов относятся к этому типу.
Если вы предпочитаете просматривать имена всех программных файлов, можно использовать параметр /v для создания подробных выходных данных:
E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory
SYMCHK: MyApp.exe PASSED
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
Следующая команда выполняет поиск огромного количества символов Windows на сервере символов. Существует множество возможных сообщений об ошибках:
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