Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A sintaxe básica para SymChk é a seguinte:
symchk [/r] FileNames /s SymbolPath
FileNames especifica um ou mais arquivos de programa cujos símbolos são necessários. Se FileNames for um diretório e o sinalizador /r for usado, esse diretório será explorado recursivamente, e o SymChk tentará encontrar símbolos para todos os arquivos de programa nessa árvore de diretórios. SymbolPath especifica onde o SymChk deve procurar símbolos.
Há muito mais opções de linha de comando. Para obter uma lista completa, consulte Opções de Command-Line do SymChk.
Obtendo symchk
O Symchk, como outras ferramentas de depuração, é fornecido como parte do depurador. Para obter mais informações, consulte Debugging Tools for Windows.
Uma vez instaladas as ferramentas de depuração, o symchk estará disponível neste diretório para Windows de 64 bits.
C:\Arquivos de Programas (x86)\Windows Kits\10\Debuggers\x64
Exemplo de Utilização
O caminho do símbolo especificado pode incluir qualquer número de diretórios locais, diretórios UNC ou servidores de símbolos. Diretórios locais e diretórios UNC não são pesquisados recursivamente. Apenas o diretório especificado e um subdiretório baseado na extensão do executável são pesquisados. Por exemplo, a consulta
symchk thisdriver.sys /s G:\symbols
pesquisará G:\mysymbols e G:\mysymbols\sys.
Você pode especificar um servidor de símbolos usando uma das seguintes sintaxes como parte do caminho do símbolo:
srv*DownstreamStore*\\Server\Share
srv*\\Server\Share
Isso é muito semelhante ao uso de um servidor de símbolos no caminho de símbolos do depurador. Para obter detalhes sobre isso, consulte Usando servidores de símbolos e repositórios de símbolos.
Se um repositório downstream for especificado, o SymChk fará cópias de todos os arquivos de símbolos válidos encontrados pelo servidor de símbolos e os colocará no armazenamento downstream. Apenas os ficheiros de símbolos que são correspondências completas são copiados para os níveis subsequentes.
O SymChk sempre pesquisa o repositório downstream antes de consultar o servidor de símbolos. Portanto, deve ter cuidado ao usar um repositório de dados a jusante quando outra pessoa estiver a assumir o armazenamento de símbolos. Se você executar o SymChk uma vez e ele encontrar arquivos de símbolo, ele irá copiá-los para o armazenamento downstream. Se você executar o SymChk novamente depois que esses arquivos tiverem sido alterados ou excluídos na loja de símbolos, o SymChk não notará esse fato, pois encontrará o que está procurando na loja a jusante e não procurará mais.
Observação SymChk sempre usa SymSrv (Symsrv.dll) como seu servidor de símbolos DLL. Por outro lado, os depuradores podem escolher uma DLL de servidor de símbolos diferente do SymSrv, se houver uma disponível. (SymSrv é o servidor de símbolos incluído no pacote Debugging Tools for Windows.)
Usando o SymChk para determinar se os símbolos são privados ou públicos
Para determinar se um arquivo de símbolo é privado ou público, use o parâmetro /v para que o SymChk exiba uma saída detalhada. Suponha que MyApp.exe e MyApp.pdb estão na pasta c:\sym. Digite este comando.
symchk /v C:\sym\MyApp.exe /s C:\sym**
Se MyApp.pdb contiver símbolos privados, a saída do SymChk terá esta aparência.
[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
Se MyApp.pdb contiver apenas símbolos públicos, a saída do SymChk terá esta aparência.
[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
Para limitar sua pesquisa para que ela encontre apenas arquivos de símbolos públicos, use a opção s com o parâmetro /s (/ss). O comando a seguir localiza uma correspondência se MyApp.pdb contiver apenas símbolos públicos. Ele não encontra uma correspondência se MyApp.pdb contém símbolos privados.
symchk /v C:\sym\MyApp.exe /s C:\sym
Para obter mais informações, consulte Símbolos públicos e privados.
exemplos
Eis alguns exemplos. O comando a seguir procura símbolos para o programa 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
Você pode tentar novamente com um caminho de símbolo diferente:
E:\debuggers> symchk F:\myapp.exe /s F:\symbols\newdirectory
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
Desta vez, a busca foi bem-sucedida. Se a opção detalhada não for usada, o SymChk listará apenas os arquivos para os quais não conseguiu encontrar símbolos. Portanto, neste exemplo, nenhum arquivo foi listado. Você pode dizer que a pesquisa foi bem-sucedida porque agora há um arquivo listado na categoria "aprovado" e nenhum na categoria "falhou".
Um arquivo de programa é ignorado se não contiver nenhum código executável. Muitos arquivos de recursos são desse tipo.
Se preferir ver os nomes de todos os ficheiros de programa, pode usar a opção /v para gerar saída detalhada:
E:\debuggers> symchk /v F:\myapp.exe /s F:\symbols\newdirectory
SYMCHK: MyApp.exe PASSED
SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1
O comando a seguir procura um grande número de símbolos do Windows em um servidor de símbolos. Há uma grande variedade de mensagens de erro possíveis:
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