Ruta de acceso de símbolo para depuradores de Windows

La ruta de acceso de símbolo especifica las 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 los símbolos y los archivos de símbolos, vea Símbolos.

Algunos compiladores, incluido 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 buscar 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 de 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 , ..\exeo ..\sys, en función de los archivos binarios ..\dllque 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 con 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 conocer otras formas de establecer la ruta de acceso del símbolo, vea Controlar la ruta de acceso del símbolo 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 de Microsoft público. 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 en c:\MyServerSymbols.

    .sympath srv*C:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
    

Si tiene un directorio en el equipo donde 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 los 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 en el c:\MySymbols directorio .

.sympath cache*C:\MySymbols;srv*https://msdl.microsoft.com/download/symbols

Uso de AgeStore para reducir el tamaño de caché

Puede usar la herramienta AgeStore para eliminar los 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 de PDB. Si la nueva ruta de acceso sigue incluyendo 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 diferida de símbolos 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

Hay un servidor de símbolos 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, solo tiene que escribir .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_PATHvariables 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_PATHde . 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, por ejemplo, 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, puedes 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 -nWinDbg Command-Line para mostrar detalles adicionales a medida que se cargan los símbolos. Para obtener estrategias de solución de problemas adicionales, consulte Comprobación de símbolos.

Consulte también

Symbols

Uso avanzado de SymSrv

Comando .sympath

.symfix