Ruta de acceso a símbolos para depuradores de Windows
La ruta de acceso de símbolo especifica ubicaciones en las que los depuradores de Windows, como WinDbg, KD, CDB y NTST, buscan archivos de símbolos. Para obtener más información sobre símbolos y archivos de símbolos, vea Símbolos.
Algunos compiladores, como Microsoft Visual Studio, colocan archivos de símbolos en el mismo directorio que los archivos binarios. Los archivos de símbolos y los archivos binarios comprobados contienen información de ruta de acceso y nombre de archivo, lo que permite al depurador encontrar automáticamente los archivos de símbolos. Si depura un proceso en modo de usuario en el equipo donde se creó el archivo ejecutable y si los archivos de símbolos están en su ubicación original, el depurador puede localizar los archivos de símbolos sin establecer la ruta de acceso del símbolo.
En la mayoría de las otras situaciones, debe establecer la ruta de acceso del símbolo para que apunte a las ubicaciones del archivo de símbolos.
Sugerencia
Use .symfix para establecer una ruta de acceso predeterminada al servidor de símbolos público público de Microsoft que funciona bien en muchas situaciones.
Sintaxis de ruta de acceso de símbolo
La ruta de acceso del símbolo del depurador es una cadena que consta de varias rutas de acceso de directorio separadas por punto y coma. Por ejemplo, C:\Dir1;C:\Dir2\DirA;C:\Dir2\DirB
.
No se admiten rutas de acceso relativas. Sin embargo, debe agregar una letra de unidad o un recurso compartido de red antes de cada ruta de acceso, a menos que siempre inicie el depurador desde el mismo directorio. También se admiten recursos compartidos de red.
Para cada directorio de la ruta de acceso de símbolo, el depurador busca en tres directorios. Por ejemplo, si la ruta de acceso al símbolo incluye C:\Dir1
y el depurador busca información de símbolos para un archivo DLL, el depurador busca información de símbolos en los directorios siguientes, enumerados en orden:
C:\Dir1\symbols\dll
C:\Dir1\dll
C:\Dir1
A continuación, el depurador repite este proceso para cada directorio de la ruta de acceso del símbolo. Por último, el depurador busca en el directorio actual y, a continuación, en el directorio actual con ..\dll
anexado a él. El depurador anexa , ..\exe
o ..\sys
, en función de los archivos binarios ..\dll
que se depuran.
Los archivos de símbolos tienen marcas de fecha y hora. El depurador siempre busca los símbolos que coinciden con la marca de tiempo en los archivos binarios que está depurando. No tiene que preocuparse por el depurador mediante los símbolos incorrectos que encuentra primero en esta secuencia. Para obtener más información sobre las respuestas cuando los archivos de símbolos no están disponibles, vea Nombres de símbolos coincidentes.
Una manera de establecer la ruta de acceso del símbolo es escribiendo el comando .sympath. Para ver otras formas de establecer la ruta de acceso del símbolo, vea Controlar la ruta de acceso de símbolos más adelante en este tema.
Almacenar en caché símbolos localmente
Debe almacenar en caché los símbolos localmente. Una manera de almacenar en caché los símbolos localmente es incluir cache*;
o cache*localsymbolcache;*
en la ruta de acceso del símbolo.
Si incluye la cadena cache*;
en la ruta de acceso del símbolo, los símbolos cargados desde cualquier elemento que aparezca a la derecha de esta cadena se almacenan en el directorio de caché de símbolos predeterminado en el equipo local. Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del recurso compartido de red denominado \\someshare
y almacene en caché los símbolos en la ubicación predeterminada del equipo local.
.sympath cache*;\\someshare
Si incluye la cadena cache*localsymbolcache;
en la ruta de acceso del símbolo, los símbolos cargados desde cualquier elemento que aparezca a la derecha de esta cadena se almacenan en el directorio localsymbolcache .
Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del recurso compartido de red \\someshare
y almacene en caché los símbolos en el c:\MySymbols
directorio.
.sympath cache*C:\MySymbols;\\someshare
Uso de un servidor de símbolos: srv*
Si está conectado a Internet o a una red corporativa, la manera más eficaz de acceder a los símbolos es usar un servidor de símbolos como el servidor de símbolos público público de Microsoft. Puede usar un servidor de símbolos mediante una de las siguientes cadenas en la ruta de acceso del símbolo.
Cadena
srv*
Si incluye la cadena
srv*
en la ruta de acceso del símbolo, el depurador usa un servidor de símbolos para obtener símbolos del almacén de símbolos predeterminado. Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del almacén de símbolos predeterminado. Estos símbolos no se almacenan en caché en el equipo local..sympath srv*
Cadena
srv*symbolstore
Si incluye la cadena
srv*symbolstore
en la ruta de acceso del símbolo, el depurador usa un servidor de símbolos para obtener símbolos del almacén de símbolos. Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del almacén del servidor de símbolos de Microsoft. Estos símbolos no se almacenan en caché en el equipo local..sympath srv*https://msdl.microsoft.com/download/symbols
Cadena
srv*localsymbolcache*symbolstore
Si incluye la cadena
srv*localcache*symbolstore
en la ruta de acceso del símbolo, el depurador usa un servidor de símbolos para obtener símbolos del almacén de símbolos y los almacena en caché en el directorio localcache . Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del servidorhttps://msdl.microsoft.com/download/symbols
de símbolos de Microsoft y almacene en caché los símbolos enc:\MyServerSymbols
..sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Si tiene un directorio en el equipo en el que coloca manualmente símbolos, no use ese directorio como caché de símbolos obtenidos de un servidor de símbolos. En su lugar, use dos directorios independientes. Por ejemplo, puede colocar manualmente símbolos en c:\MyRegularSymbols
y, a continuación, designar c:\MyServerSymbols
como una memoria caché para los símbolos obtenidos de un servidor. En el ejemplo siguiente se muestra cómo especificar ambos directorios en la ruta de acceso del símbolo.
.sympath C:\MyRegularSymbols;srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
Para obtener más información sobre los servidores de símbolos y los almacenes de símbolos, vea Almacenes de símbolos personalizados y servidores de símbolos.
Combinar caché* y srv*
Si incluye la cadena cache*;
en la ruta de acceso del símbolo, los símbolos cargados desde cualquier elemento que aparezca a la derecha de esta cadena se almacenan en el directorio de caché de símbolos predeterminado en el equipo local. Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del almacén del servidor de símbolos de Microsoft y almacenarlos en caché en el directorio de caché de símbolos predeterminado.
.sympath cache*;srv*https://msdl.microsoft.com/download/symbols
Si incluye la cadena cache*localsymbolcache;
en la ruta de acceso del símbolo, los símbolos cargados desde cualquier elemento que aparezca a la derecha de esta cadena se almacenan en el directorio localsymbolcache .
Por ejemplo, el siguiente comando indica al depurador que obtenga símbolos del almacén del servidor de símbolos de Microsoft y almacene en caché los símbolos del c:\MySymbols
directorio.
.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols
Usar AgeStore para reducir el tamaño de la memoria caché
Puede usar la herramienta AgeStore para eliminar archivos almacenados en caché anteriores a una fecha especificada, o para eliminar suficientes archivos antiguos para que el tamaño de caché resultante sea menor que una cantidad especificada. Esta limpieza de archivos de caché es útil si el almacén de bajada es demasiado grande.
Carga diferida de símbolos
El comportamiento predeterminado del depurador es usar la carga diferida de símbolos, también conocida como carga diferida de símbolos. Este tipo de carga significa que los símbolos no se cargan hasta que sean necesarios.
Cuando se cambia la ruta de acceso del símbolo, por ejemplo, mediante el comando .sympath, todos los módulos cargados con símbolos de exportación se vuelven a cargar de forma diferida.
Los símbolos de módulos con símbolos PDB completos se vuelven a cargar de forma diferida si la nueva ruta de acceso ya no incluye la ruta de acceso original que se usó para cargar los símbolos PDB. Si la nueva ruta de acceso todavía incluye la ruta de acceso original al archivo de símbolos PDB, esos símbolos no se vuelven a cargar de forma diferida.
Puede desactivar la carga de símbolos diferidos en CDB y KD mediante la opción de línea de comandos -s. También puede forzar la carga de símbolos mediante el comando ld load symbols o mediante el comando del módulo .reload junto con la /f
opción .
Artefactos de Azure DevOps Services
Un servidor de símbolos está disponible con Azure Artifacts en Azure DevOps Services. Para obtener información sobre cómo trabajar con Azure Artifacts en WinDbg, consulte Depuración con símbolos en WinDbg. Para obtener información general sobre los símbolos generados por Azure, consulte Información general sobre símbolos.
Controlar la ruta de acceso del símbolo
Para controlar la ruta de acceso del símbolo, puede seleccionar uno de los métodos siguientes:
Use el comando .symfix set symbol store path para establecer una ruta de acceso predeterminada al servidor de símbolos público de Microsoft que funciona bien en muchas situaciones. Para establecer una caché local, escriba .
.symfix C:\MyCache
Use el comando .sympath para mostrar, establecer, cambiar o anexar a la ruta de acceso.
Antes de iniciar el depurador, use las
_NT_SYMBOL_PATH
variables de entorno y_NT_ALT_SYMBOL_PATH
para establecer la ruta de acceso. La ruta de acceso del símbolo se crea anexando_NT_SYMBOL_PATH
después_NT_ALT_SYMBOL_PATH
de . Normalmente, la ruta de acceso se establece a través de_NT_SYMBOL_PATH
. Sin embargo, es posible que quiera usar_NT_ALT_SYMBOL_PATH
para invalidar esta configuración en casos especiales, como si tiene versiones privadas de archivos de símbolos compartidos. Si intenta agregar un directorio no válido a través de estas variables de entorno, el depurador omite este directorio.Al iniciar el depurador, use la opción de línea de comandos -y para establecer la ruta de acceso.
Solo en WinDbg, puede usar el archivo | Comando Ruta de acceso del archivo de símbolos o presione
CTRL+S
para mostrar, establecer, cambiar o anexar a la ruta de acceso.
Si usa la opción de línea de comandos -sins, el depurador omite la variable de entorno de ruta de acceso de símbolos.
Solución de problemas
Use !sym ruidoso o la opción de línea de comandos -n WinDbg para mostrar detalles adicionales a medida que se cargan símbolos. Para obtener más estrategias de solución de problemas, consulte Comprobación de símbolos.