Uso di SymChk

La sintassi di base per SymChk è la seguente:

symchk [/r] FileNames /s SymbolPath 

FileNames specifica uno o più file di programma i cui simboli sono necessari. Se FileNames è una directory e viene usato il flag /r , questa directory viene esplorata in modo ricorsivo e SymChk tenterà di trovare i simboli per tutti i file di programma in questa struttura ad albero di directory. SymbolPath specifica dove SymChk deve cercare i simboli.

Sono disponibili molte altre opzioni della riga di comando. Per un elenco completo, vedi SymChk Command-Line Opzioni.

Ottenere symchk

Symchk, come altri strumenti di debug, viene fornito come parte del debugger. Per altre informazioni, vedere Strumenti di debug per Windows.

Dopo aver installato gli strumenti di debug, symchk è disponibile in questa directory per Windows a 64 bit.

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

Example Usage (Esempio di uso)

Il percorso del simbolo specificato può includere un numero qualsiasi di directory locali, directory UNC o server di simboli. Le directory locali e le directory UNC non vengono eseguite ricerche in modo ricorsivo. Viene eseguita la ricerca solo nella directory specificata e in una sottodirectory basata sull'estensione dell'eseguibile. Ad esempio, la query

symchk thisdriver.sys /s G:\symbols 

cercherà G:\mysymbols e G:\mysymbols\sys.

È possibile specificare un server di simboli usando una delle sintassi seguenti come parte del percorso del simbolo:

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

Questo è molto simile all'uso di un server di simboli nel percorso del simbolo del debugger. Per informazioni dettagliate, vedere Uso di server di simboli e archivi simboli.

Se viene specificato un archivio downstream, SymChk creerà copie di tutti i file di simboli validi trovati dal server dei simboli e li inserisce nell'archivio downstream. Vengono copiati solo i file di simboli che sono corrispondenze complete.

SymChk cerca sempre l'archivio downstream prima di eseguire query sul server dei simboli. È pertanto consigliabile prestare attenzione all'uso di un archivio downstream quando un altro utente gestisce l'archivio simboli. Se si esegue SymChk una volta e si trovano i file di simboli, verranno copiati nell'archivio downstream. Se si esegue di nuovo SymChk dopo che questi file sono stati modificati o eliminati nell'archivio simboli, SymChk non noterà questo fatto, poiché troverà quello che sta cercando sul negozio downstream e non cercare più.

Nota SymChk usa sempre SymSrv (Symsrv.dll) come DLL del server di simboli. D'altra parte, i debugger possono scegliere una DLL del server di simboli diversa da SymSrv, se disponibile. SymSrv è il server di simboli incluso nel pacchetto Debugging Tools for Windows.

Uso di SymChk per determinare se i simboli sono privati o pubblici

Per determinare se un file di simboli è privato o pubblico, usare il parametro /v in modo che SymChk visualizzi l'output dettagliato. Si supponga che MyApp.exe e MyApp.pdb si trovino nella cartella c:\sym. Immettere questo comando.

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

Se MyApp.pdb contiene simboli privati, l'output di SymChk sarà simile al seguente.

[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 contiene solo simboli pubblici, l'output di SymChk sarà simile al seguente.

[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

Per limitare la ricerca in modo che trovi solo i file di simboli pubblici, usare l'opzione s con il parametro /s (/ss). Il comando seguente trova una corrispondenza se MyApp.pdb contiene solo simboli pubblici. Non trova una corrispondenza se MyApp.pdb contiene simboli privati.

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

Per altre informazioni, vedere Simboli pubblici e privati.

Esempi:

Di seguito sono riportati alcuni esempi. Il comando seguente cerca i simboli per il programma 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

È possibile riprovare con un percorso di simbolo diverso:

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

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

La ricerca ha avuto esito positivo questa volta. Se l'opzione dettagliata non viene usata, SymChk elenca solo i file per i quali non riesce a trovare i simboli. In questo esempio non sono stati elencati file. È possibile indicare che la ricerca è riuscita perché ora è presente un file elencato nella categoria "passata" e nessuno nella categoria "failed".

Un file di programma viene ignorato se non contiene codice eseguibile. Molti file di risorse sono di questo tipo.

Se si preferisce visualizzare i nomi di file di tutti i file di programma, è possibile usare l'opzione /v per generare un output dettagliato:

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

SYMCHK: MyApp.exe           PASSED

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

Il comando seguente cerca un numero enorme di simboli di Windows in un server di simboli. Esistono un'ampia gamma di possibili messaggi di errore:

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

Vedere anche

Opzioni di symchk Command-Line

Utilizzo di server di simboli e archivi simboli