Compartir a través de


Uso de SymChk

La sintaxis básica de SymChk es la siguiente:

symchk [/r] FileNames /s SymbolPath 

FileNames especifica uno o varios archivos de programa cuyos símbolos son necesarios. Si FileNames es un directorio y se usa la marca /r , este directorio se explora de forma recursiva y SymChk intentará buscar símbolos para todos los archivos de programa de este árbol de directorios. SymbolPath especifica dónde se va a buscar símbolos SymChk.

Hay muchas más opciones de línea de comandos. Para obtener una lista completa, consulte Opciones de SymChk Command-Line.

Obtención de symchk

Symchk, al igual que otras herramientas de depuración, se distribuye como parte del depurador. Para obtener más información, vea Herramientas de depuración de Windows.

Una vez instaladas las herramientas de depuración, symchk está disponible en este directorio para Windows de 64 bits.

C:\Archivos de programa (x86)\Windows Kits\10\Debuggers\x64

Ejemplo de uso

La ruta de acceso de símbolo especificada puede incluir cualquier número de directorios locales, directorios UNC o servidores de símbolos. Los directorios locales y los directorios UNC no se buscan de forma recursiva. Solo se busca el directorio especificado y un subdirectorio basado en la extensión del ejecutable. Por ejemplo, la consulta

symchk thisdriver.sys /s G:\symbols 

buscará G:\mysymbols y G:\mysymbols\sys.

Puede especificar un servidor de símbolos mediante cualquiera de las siguientes sintaxis como parte de la ruta de acceso del símbolo:

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

Esto es muy similar al uso de un servidor de símbolos en la ruta de acceso de símbolos del depurador. Para obtener más información, consulte Uso de servidores de símbolos y almacenes de símbolos.

Si se especifica un almacén de bajada, SymChk realizará copias de todos los archivos de símbolos válidos encontrados por el servidor de símbolos y los colocará en el almacén de bajada. Solo los archivos de símbolos que son coincidencias completas se copian de bajada.

SymChk siempre busca en el almacén de bajada antes de consultar el servidor de símbolos. Por lo tanto, debe tener cuidado de usar un almacén de bajada cuando otra persona mantiene el almacén de símbolos. Si ejecuta SymChk una vez y encuentra archivos de símbolos, los copiará en el almacén de bajada. Si, a continuación, vuelve a ejecutar SymChk después de que estos archivos se hayan modificado o eliminado en el almacén de símbolos, SymChk no observará este hecho, ya que encontrará lo que está buscando en el almacén de bajada y no buscará más.

Nota SymChk siempre usa SymSrv (Symsrv.dll) como dll de servidor de símbolos. Por otro lado, los depuradores pueden elegir un archivo DLL de servidor de símbolos distinto de SymSrv si hay uno disponible. (SymSrv es el servidor de símbolos incluido en el paquete Herramientas de depuración para Windows).

Uso de SymChk para determinar si los símbolos son privados o públicos

Para determinar si un archivo de símbolos es privado o público, use el parámetro /v para que SymChk muestre la salida detallada. Supongamos que MyApp.exe y MyApp.pdb están en la carpeta c:\sym. Escriba este comando.

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

Si MyApp.pdb contiene símbolos privados, la salida de SymChk tiene este aspecto.

[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

Si MyApp.pdb solo contiene símbolos públicos, la salida de SymChk tiene este aspecto.

[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 la búsqueda para que solo encuentre archivos de símbolos públicos, use la opción s con el parámetro /s (/ss). El siguiente comando busca una coincidencia si MyApp.pdb solo contiene símbolos públicos. No encuentra ninguna coincidencia si MyApp.pdb contiene símbolos privados.

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

Para obtener más información, vea Símbolos públicos y privados.

Ejemplos

Estos son algunos ejemplos. El siguiente comando busca símbolos para el 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

Puede volver a intentarlo con una ruta de acceso de símbolo diferente:

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

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

La búsqueda se realizó correctamente esta vez. Si no se usa la opción detallada, SymChk solo mostrará los archivos para los que no se encontraron símbolos. Por lo tanto, en este ejemplo no se enumeraron archivos. Puede indicar que la búsqueda se realizó correctamente porque ahora hay un archivo enumerado en la categoría "pasado" y ninguno en la categoría "failed".

Se omite un archivo de programa si no contiene código ejecutable. Muchos archivos de recursos son de este tipo.

Si prefiere ver los nombres de archivo de todos los archivos de programa, puede usar la opción /v para generar una salida detallada:

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

SYMCHK: MyApp.exe           PASSED

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

El siguiente comando busca un gran número de símbolos de Windows en un servidor de símbolos. Hay una gran variedad de posibles mensajes de error:

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

Consulte también

Opciones de SymChk Command-Line

Uso de servidores de símbolos y almacenes de símbolos