Compartir a través de


Uso avanzado de SymSrv

SymSrv puede entregar archivos de símbolos desde un almacén de símbolos centralizado. Este almacén puede contener cualquier número de archivos de símbolos, correspondiente a cualquier número de programas o sistemas operativos. El almacén también puede contener archivos binarios (esto resulta útil al depurar minivolcados).

El almacén puede contener el símbolo real y los archivos binarios, o simplemente puede contener punteros a archivos de símbolos. Si el almacén contiene punteros, SymSrv recuperará los archivos reales directamente de sus orígenes.

SymSrv también se puede usar para separar un almacén de símbolos grande en un subconjunto más pequeño que sea adecuado para una tarea de depuración especializada.

Por último, SymSrv puede obtener archivos de símbolos de un origen HTTP o HTTPS mediante la información de inicio de sesión proporcionada por el sistema operativo. SymSrv admite sitios HTTPS protegidos por tarjetas inteligentes, certificados y inicios de sesión y contraseñas normales. Para obtener más información, vea Almacenes de símbolos HTTP.

Establecer la ruta de acceso del símbolo

Para usar este servidor de símbolos, symsrv.dll debe instalarse en el mismo directorio que el depurador. La ruta de acceso del símbolo se puede establecer como se muestra en este código:

set _NT_SYMBOL_PATH = symsrv*ServerDLL*DownstreamStore*\\Server\Share

set _NT_SYMBOL_PATH = symsrv*ServerDLL*\\Server\Share

set _NT_SYMBOL_PATH = srv*DownstreamStore*\\Server\Share

set _NT_SYMBOL_PATH = srv*\\Server\Share

Las partes de esta sintaxis se explican de la siguiente manera:

symsrv
Esta palabra clave siempre debe aparecer primero. Indica al depurador que este elemento es un servidor de símbolos, no solo un directorio de símbolos normal.

ServerDLL
Especifica el nombre del archivo DLL del servidor de símbolos. Si usa el servidor de símbolos SymSrv, siempre será symsrv.dll.

srv
Esta es la abreviatura de symsrv*symsrv.dll.

DownstreamStore
Especifica el almacén de bajada. Se trata de un directorio local o recurso compartido de red que se usará para almacenar en caché archivos de símbolos individuales.

Puede especificar más de un almacén de bajada, separados por asteriscos. En cascada, en esta página se explican varios almacenes de bajada en cascada .

Si incluye dos asteriscos en una fila donde normalmente se especificaría un almacén de bajada, se usa el almacén de bajada predeterminado. Esta tienda se ubicará en el subdirectorio simbólico del directorio principal. El directorio principal tiene como valor predeterminado el directorio de instalación del depurador; Esto se puede cambiar mediante la extensión !homedir o estableciendo la variable de entorno DBGHELP_HOMEDIR.

Si DownstreamStore especifica un directorio que no existe, SymStore intentará crearlo.

Si se omite el parámetro DownstreamStore y no se incluye ningún asterisco adicional(es decir, si usa srv con exactamente un asterisco o symsrv con exactamente dos asteriscos), no se creará ningún almacén de bajada. El depurador cargará todos los archivos de símbolos directamente desde el servidor, sin almacenarlos en caché localmente.

Nota Si accede a símbolos desde un sitio HTTP o HTTPS, o si el almacén de símbolos usa archivos comprimidos, siempre se usa un almacén de bajada. Si no se especifica ningún almacén de bajada, se creará uno en el subdirectorio sym del directorio principal.

\\Server\Share
Especifica el servidor y el recurso compartido del almacén de símbolos remotos.

Si se usa un almacén de bajada, el depurador buscará primero un archivo de símbolos en este almacén. Si no se encuentra el archivo de símbolos, el depurador buscará el archivo de símbolos del servidor y el recurso compartido especificados y, a continuación, almacenará en caché una copia de este archivo en el almacén de bajada. El archivo se copiará en un subdirectorio del árbol en DownstreamStore , que corresponde a su ubicación en el árbol en \\Server\Share.

El servidor de símbolos no tiene que ser la única entrada en la ruta de acceso del símbolo. Si la ruta de acceso al símbolo consta de varias entradas, el depurador comprueba cada entrada de los archivos de símbolos necesarios, en orden (de izquierda a derecha), independientemente de si se denomina un servidor de símbolos o un directorio real.

Aquí hay algunos ejemplos. Para usar SymSrv como servidor de símbolos con un almacén de símbolos en \\mybuilds\mysymbols, establezca la siguiente ruta de acceso de símbolo:

set _NT_SYMBOL_PATH= symsrv*symsrv.dll*\\mybuilds\mysymbols

Para establecer la ruta de acceso del símbolo para que el depurador copie los archivos de símbolos de un almacén de símbolos en \\mybuilds\mysymbols en el directorio local c:\localsymbols, use:

set _NT_SYMBOL_PATH=symsrv*symsrv.dll*c:\localsymbols*\\mybuilds\mysymbols

Para establecer la ruta de acceso de símbolo para que el depurador copie los archivos de símbolos del sitio https://www.company.com/manysymbols HTTPS en un directorio de red local \\localserver\myshare\mycache, use:

set _NT_SYMBOL_PATH=symsrv*symsrv.dll*\\localserver\myshare\mycache*https://www.company.com/manysymbols

Este último ejemplo también se puede acortar como tal:

set _NT_SYMBOL_PATH=srv*\\localserver\myshare\mycache*https://www.company.com/manysymbols

Además, la ruta de acceso del símbolo puede contener varios directorios o servidores de símbolos, separados por punto y coma. Esto le permite localizar símbolos desde varias ubicaciones (o incluso varios servidores de símbolos). Si un binario tiene un archivo de símbolos no coincidente, el depurador no puede localizarlo mediante el servidor de símbolos porque comprueba solo los parámetros exactos. Sin embargo, el depurador puede encontrar un archivo de símbolos no coincidente con el nombre correcto, mediante la ruta de acceso del símbolo tradicional y cargarlo correctamente. Aunque el archivo no es técnicamente el archivo de símbolos correcto, puede proporcionar información útil.

Eliminación de la memoria caché

Si usa una instancia de DownstreamStore como caché, puede eliminar este directorio en cualquier momento para ahorrar espacio en disco.

Es posible tener un gran almacén de símbolos que incluya archivos de símbolos para muchos programas diferentes o versiones de Windows. Si actualiza la versión de Windows usada en el equipo de destino, todos los archivos de símbolos almacenados en caché coincidirán con la versión anterior. Estos archivos almacenados en caché no serán de ningún uso adicional y, por lo tanto, esto puede ser un buen momento para eliminar la memoria caché.

Almacenes de bajada en cascada

Puede especificar cualquier número de almacenes de bajada, separados por asteriscos. Estas tiendas se conocen como almacenes de símbolos en cascada.

Después de la inicial srv* o symsrv*ServerDLL*, cada token subsiguiente representa una ubicación de símbolo. Primero se comprueba el token más alejado de la izquierda. Un token vacío, indicado por dos asteriscos en una fila o por un asterisco al final de la cadena, representa el almacén de bajada predeterminado.

Este es un ejemplo de una ruta de acceso de símbolos que usa dos almacenes de bajada para contener información del almacén de símbolos principal al que se accede. Se podría llamar el almacén maestro, el almacén de nivel medio y la caché local:

srv*c:\localcache*\\interim\store*https://msdl.microsoft.com/download/symbols

En este escenario, SymSrv buscará primero en c:\localcache para un archivo de símbolos. Si se encuentra allí, devolverá una ruta de acceso a ella. Si no se encuentra allí, se buscará en \\provisional\store. Si el archivo de símbolos se encuentra allí, SymSrv lo copiará en c:\localcache y devolverá la ruta de acceso. Si no se encuentra allí, SymSrv buscará en el almacén de símbolos públicos de Microsoft en https://msdl.microsoft.com/download/symbols; si el archivo se encuentra allí, SymSrv lo copiará en \\provisional\store y c:\localcache.

Un comportamiento similar se obtendría mediante la siguiente ruta de acceso:

srv**\\interim\store*https://internetsite

En este caso, la caché local es el almacén de bajada predeterminado y el almacén maestro es un sitio de Internet. Se ha especificado un almacén de nivel medio de \\provisional\store para su uso entre los otros dos.

Cuando SymSrv procesa una ruta de acceso que contiene almacenes en cascada, omitirá cualquier almacén en el que no pueda leer ni escribir. Por lo tanto, si un recurso compartido deja de funcionar, copiará el archivo en el almacén de bajada desde el almacén que falta sin ningún error. Un buen efecto secundario de este error es que el usuario puede especificar más de un almacén maestro que alimenta una sola secuencia de almacenes de bajada siempre que los almacenes maestros no se puedan escribir.

Cuando se recupera un archivo de símbolos comprimidos del almacén maestro, se almacenará en forma comprimida en cualquier almacén de nivel medio. El archivo se descomprimirá en el almacén inferior de la ruta de acceso.

Trabajar con rutas de acceso del servidor de símbolos HTTP y SMB

Como se explicó anteriormente, el encadenamiento (o en cascada) hace referencia a la copia que se produce entre cada separador "*" en la ruta de acceso del símbolo. Los símbolos se buscan en un orden de izquierda a derecha. En cada error, se consulta el siguiente servidor de símbolos (ascendente), hasta que se encuentre el archivo.

Si se encuentra, el archivo se copia del servidor de símbolos (ascendente) al servidor de símbolos anterior (descendente). Esto se repite para cada servidor de símbolos (de bajada). De este modo, los servidores de símbolos de bajada (compartidos) se rellenan con los esfuerzos colectivos de todos los clientes mediante los servidores de símbolos.

Aunque las rutas de acceso UNC encadenadas se pueden usar sin el prefijo SRV*, se recomienda especificar SRV* para que se use el control avanzado de errores de symsrv.dll.

Al incluir un servidor de símbolos HTTP en la ruta de acceso, solo se puede especificar uno (por cadena) y debe estar al final de la ruta de acceso (ya que no se puede escribir para servir como caché). Si un almacén de símbolos basado en HTTP se encuentra en el centro o a la izquierda de la lista de tiendas, no sería posible copiar los archivos encontrados en él y la cadena se rompería. Además, dado que el controlador de símbolos no puede abrir un archivo desde un sitio web, un almacén basado en HTTP no debe ser el más izquierdo o solo almacenar en la lista. Si SymSrv se presenta alguna vez con esta ruta de acceso de símbolo, intentará recuperarse copiando el archivo en el almacén de bajada predeterminado y ábralo desde allí, independientemente de si el almacén de bajada predeterminado se indica en la ruta de acceso del símbolo o no.

HTTP solo se admite cuando se usa el prefijo SRV* (implementado por el controlador de símbolos de symsrv.dll).

Escenarios de servidor de símbolos de recurso compartido de HTTP y SMB de ejemplo

Una implementación común de solo UNC implica que una oficina central que hospede todos los archivos (\\MainOffice\Symbols), las sucursales almacenan en caché un subconjunto (\\BranchOfficeA\Symbols) y los escritorios (C:\Symbols) almacenan en caché los archivos a los que hacen referencia.

srv*C:\Symbols*\\BranchOfficeA\Symbols*\\MainOffice\Symbols

Cuando el recurso compartido SMB es el almacén de símbolos principal (ascendente), se requiere Lectura.

srv*C:\Symbols*\\MachineName\Symbols

Cuando el recurso compartido SMB es un almacén de símbolos intermedio (de bajada), se requiere lectura y cambio. El cliente copiará el archivo desde el almacén de símbolos principal al recurso compartido SMB y, a continuación, desde el recurso compartido SMB a la carpeta local.

srv*C:\Symbols*\\MachineName\Symbols*https://msdl.microsoft.com/download/symbols
srv*C:\Symbols*\\MachineName\Symbols*\\MainOffice\Symbols

Cuando el recurso compartido SMB es un almacén de símbolos intermedio (descendente) en una implementación de SymProxy, solo se requiere Lectura. El filtro ISAPI symProxy realizará las escrituras, no el cliente.

srv*C:\Symbols*\\MachineName\Symbols*https://SymProxyName/Symbols

Varios escenarios de caché del servidor de símbolos de recursos compartidos HTTP y SMB

Es posible especificar varias cadenas de servidores de símbolos y ubicaciones de caché, separadas por un punto y coma ";". Si los símbolos se encuentran en la primera cadena, la segunda cadena no se recorre. Si los símbolos no se encuentran en la primera cadena, se recorrerá la segunda cadena y, si los símbolos se encuentran en la segunda cadena, se almacenarán en caché en la ubicación especificada. Este enfoque permitirá que se use normalmente un servidor de símbolos principal, con un servidor secundario que solo se use, si los símbolos no están disponibles en el servidor de símbolos principal especificado en la primera cadena.

srv*C:\Symbols*\\Machine1\Symbols*https://SymProxyName/Symbols;srv*C:\WebSymbols*https://msdl.microsoft.com/download/symbols

cache*localsymbolcache

Otra manera de crear una caché local de símbolos es usar la cadena en la cache*localsymbolcache ruta de acceso del símbolo. Esto no forma parte del elemento de servidor de símbolos, sino un elemento independiente en la ruta de acceso del símbolo. El depurador usará el directorio especificado localsymbolcache para almacenar los símbolos cargados desde cualquier elemento que aparezca en la ruta de acceso del símbolo a la derecha de esta cadena. Esto le permite usar una caché local para símbolos descargados desde cualquier ubicación, no solo las descargadas por un servidor de símbolos.

Por ejemplo, la siguiente ruta de acceso al símbolo no almacenará en caché los símbolos tomados de \\someshare. Usará c:\mysymbols para almacenar en caché los símbolos tomados de \\anothershare, ya que el elemento que comienza con \\anothershare aparece a la derecha del elemento cache*c:\mysymbols . También usará c:\mysymbols para almacenar en caché símbolos tomados del almacén de símbolos públicos de Microsoft, debido a la sintaxis habitual usada por el servidor de símbolos (srv con dos o más asteriscos). Además, si posteriormente usa el comando .sympath+ para agregar ubicaciones adicionales a esta ruta de acceso, estos nuevos elementos también se almacenarán en caché, ya que se anexarán al lado derecho de la ruta de acceso.

_NT_SYMBOL_PATH=\\someshare\that\cachestar\ignores;srv*c:\mysymbols*https://msdl.microsoft.com/download/symbols;cache*c:\mysymbols;\\anothershare\that\gets\cached

Cómo SymSrv localiza archivos

SymSrv crea una ruta de acceso UNC completa al archivo de símbolos deseado. Esta ruta de acceso comienza con la ruta de acceso al almacén de símbolos registrado en la variable de entorno _NT_SYMBOL_PATH. A continuación, la rutina SymbolServer se usa para identificar el nombre del archivo deseado; este nombre se anexa a la ruta de acceso como un nombre de directorio. A continuación, se anexa otro nombre de directorio, que consta de la concatenación del identificador, dos y tres parámetros pasados a SymbolServer. Si alguno de estos valores es cero, se omiten.

El directorio resultante se busca en el archivo de símbolos o en un archivo de puntero de almacén de símbolos.

Si esta búsqueda se realiza correctamente, SymbolServer pasa la ruta de acceso al autor de la llamada y devuelve TRUE. Si no se encuentra el archivo, SymbolServer devuelve FALSE.

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

La herramienta AgeStore se puede usar para eliminar archivos almacenados en caché que son anteriores a una fecha especificada o para reducir el contenido de la memoria caché por debajo de un tamaño especificado. Esto puede ser útil si el almacén de bajada es demasiado grande. Para obtener más información, consulte AgeStore.