2011-03-11 7 views
21

Cada pieza de documentación que he encontrado (referencias 1 a 5) habla sobre la configuración de un servidor de símbolos usando una ruta UNC compartida y luego poner las configuraciones correctas disponibles a la instancia del depurador local (ya sea _NT_SYMBOL_PATH o la configuración de depuración IDE de Visual Studio).Configuración de un servidor de símbolos público (o privado) en http

Microsoft proporciona un servidor de símbolos (referencia 6) disponible a través de http para sus almacenes de símbolos públicos.

Quiero crear, para mi propio código, un servidor de símbolos accesible a través de transporte http, en lugar de compartir archivos UNC. La gente de Mozilla parece haberlo hecho (referencia 7), pero ya no es funcional.

¿Hay mejores referencias disponibles para realizar esta tarea que las que he encontrado hasta ahora?


Referencias

  1. https://msdn.microsoft.com/en-us/library/b8ttk8zy(v=vs.80).aspx
  2. http://msdn.microsoft.com/en-us/library/ms680693(v=vs.85).aspx
  3. http://stackhash.com/blog/post/Setting-up-a-Symbol-Server.aspx
  4. http://entland.homelinux.com/blog/2006/07/06/ ...
  5. http://msdn.microsoft.com/en-us/windows/hardware/gg462988
  6. http://support.microsoft.com/kb/311503
  7. http://developer.mozilla.org/en/Using_the_Mozilla_symbol_server
+0

Referencias: 1. http://msdn.microsoft.com/en-us/library/b8ttk8zy.aspx 2. http://msdn.microsoft.com/en-us/library/ms680693(v = vs.85).aspx 3. http://www.stackhash.com/blog/post/Setting-up-a-Symbol-Server.aspx 4. http://entland.homelinux.com/blog/2006/07/06/ creación-a-símbolo-servidor/ 5. http://msdn.microsoft.com/en-us/windows/hardware/gg462988 6. http://support.microsoft.com/kb/311503 7 . https://developer.mozilla.org/en/Using_the_Mozilla_symbol_server –

+1

¿Qué pasa si lo configuran en un recurso compartido de archivos WebDAV habilitado con IIS? Quizás eso es lo que hace MS. –

+0

Así que tal vez lo que hay que hacer es conectar un monitor de conexión TCP y simplemente ver el tráfico que va a http://dl.microsoft.com para ver qué y cómo lo hace. –

Respuesta

13

Creo que la respuesta es muy simple: "Sólo compartir el directorio a través de algún tipo de ruta http". De acuerdo con Chad Austin's entry on "Creating Your Very Own Symbol Server", esto solo funcionará.

En otras palabras, el directorio que symstore.exe utiliza para almacenar los símbolos, cuando se sirve como http://symbols.example.com/public_symbols/, se podrá usar como destino del servidor de símbolos para las Herramientas de depuración de Windows.

+1

+1 desde Gem City. – trashgod

+2

El artículo de Chad Austin no menciona cómo exponer el servidor de símbolos a través de HTTP. – Crashworks

11

Tenga cuidado cuando varios usuarios usen Symstore.exe directamente contra el mismo almacén de símbolos. Los libros blancos de Microsoft sobre este tema lo hacen parecer que simplemente crea un recurso compartido y hace que todos se actualicen a través del programa SYMSTORE.EXE entregado como parte de Debugging Tools for Windows. Los libros blancos le aconsejan que haga esto en cada compilación.

Y funciona muy bien con usuarios únicos o al canalizar todas las actualizaciones a través de una sola persona que está actualizando el servidor de símbolos para un equipo.

Desafortunadamente, la "letra pequeña" en la parte inferior de algunos de los libros blancos dice que solo un usuario que ejecuta symstore.exe puede actualizar el servidor de símbolos compartido al mismo tiempo sin romper el contenido.

(Ejemplo: en http://msdn.microsoft.com/en-us/library/ms681417(VS.85).aspx, Microsoft dice: "Nota SymStore no admite transacciones simultáneas de usuarios múltiples. Se recomienda designar a un usuario como" administrador "del almacén de símbolos y ser responsable de todas las transacciones add y del. ")

Por lo tanto, no existe un mecanismo inherente para serializar las actualizaciones en el almacén de símbolos. Parece que múltiples intentos simultáneos para actualizar el almacén de símbolos pueden romper el almacén de símbolos y/o su índice.

No podemos tener versiones para todo nuestro multimillonario hombre, corporación internacional en todas las zonas horarias, dependiendo de la coordinación a través de un solo hombre en una ubicación.

Basado en esos libros blancos, planteé este problema con Microsoft en marzo de 2009; quien confirmó que este era un problema posible. Después de esa discusión, elegimos implementar un servicio de actualización de símbolos que serializa las actualizaciones a través de Direct Debug Tools Tools SDK DbgEng.DLL SymbolSrvStoreFile() Llamadas a la API por lo que nunca hay posibilidad de dos actualizaciones simultáneas contra la misma área de símbolos al mismo tiempo . Los usuarios tienen una acción de compilación que pone en cola sus símbolos a través del servicio en lugar de actualizar directamente el almacén de símbolos. Luego, el servicio serializa las actualizaciones para asegurarse de que nunca se produzcan verdaderos intentos de actualización simultáneos.

La documentación limitada disponible sobre el uso de SymSrvStoreFile no estaba muy clara en ese momento. Lo hice funcionar. Esperemos que se haya mejorado desde entonces. de lo contrario, el problema más importante fue que la ruta de entrada debe especificarse en un formato similar a _NT_SYMBOL_PATH. Por lo tanto, en lugar de, por ejemplo, usar "C: \ Data \ MyProject \ bin" como ruta de entrada, en su lugar debe especificar "srv * C: \ Data \ MyProject \ bin".

Nuestro servicio ahora también registra las actualizaciones a través de una base de datos. La base de datos funciona como copia de seguridad en el almacén de símbolos (en caso de que se corrompa y debe reconstruirse) y también crea un punto de notificación para que los gerentes y el personal de soporte sepan quién está guardando realmente sus símbolos y quién no. Generamos un informe semanal de "registro de símbolos" que se envía por correo electrónico automático a las partes interesadas.

5

Nuestro servidor de símbolos (Mozilla) funciona bien, AFAICT. No estamos haciendo nada particularmente complicado, simplemente colocamos los archivos PDB en la estructura de directorios correcta (tenemos a script for that, pero puedes usar symstore.exe) y lo servimos a través de Apache. Creo que lo único especial que tenemos son algunas reglas Rewrite para permitir el acceso a los archivos de una manera que no distingue entre mayúsculas y minúsculas, porque las herramientas de Microsoft son realmente inconsistentes con el nombre de archivo/caso GUID.

+0

El nuevo enlace es https://dxr.mozilla.org/mozilla-central/source/toolkit/crashreporter/tools/symbolstore.py – PhilLab

4

Un servidor de símbolos servido a través de HTTP tiene la misma estructura que un servidor de símbolos servido mediante una ruta de archivo UNC, por lo que lo más simple sería usar symstore.exe para almacenar los archivos en una carpeta en algún lugar y luego usar servidor HTTP simple que expone esa carpeta a través de HTTP (incluso ejecutando python -m SimpleHTTPServer en el directorio de símbolos podría funcionar).

Un pequeño error es que si un archivo de símbolos no existe, el servidor HTTP debe devolver un código de error 404 (probado al menos en Visual Studio 2013). Me encontré con un problema en el que un servidor HTTP que devolvía 403 para archivos perdidos hacía que Visual Studio dejara de hacer solicitudes después de la primera solicitud fallida.

symstore.exe crea una serie de archivos y carpetas auxiliares (la carpeta 000Admin/, refs.ptr y files.ptr). Ninguno de estos es necesario para que el servidor de símbolos funcione.

Si desea crear un almacén de símbolos sin utilizar symstore.exe, puede cargar los archivos con esta estructura:

BinaryName.pdb/$BUILD_ID/BinaryName.pdb BinaryName.exe/$LINK_ID/BinaryName.exe

Dónde BUILD_ID es un GUID incrustado en el archivo PDB y ejecutable y LINK_ID es una combinación de marca de tiempo de compilación y tamaño de archivo en el ejecutable. Estos se pueden obtener leyendo el resultado de la herramienta dump_syms.exe de la biblioteca del bloque de seguridad. Ver http://www.chromium.org/developers/decoding-crash-dumps

Cuestiones relacionadas