En primer lugar, el problema: Tengo varios proyectos gratuitos, y como cualquier software que contienen errores. Algunos compañeros usuarios cuando se encuentran errores me envían un informe de errores con seguimientos de pila. Para simplificar la búsqueda de un lugar de falla, quiero ver los números de línea en esta pila. Si la aplicación se envió sin archivos .pdb, se pierde toda la información de la línea, por lo que actualmente todos mis proyectos implementados con archivos .pdb, y por lo tanto los trazados de la pila generados tienen estos números. ¡Pero! Pero no quiero ver estos archivos en distribución y quiero eliminar todos los archivos .pdb. Ellos confundir a los usuarios, consumen espacio en el instalador, etc.¿Recrea el seguimiento de la pila con los números de línea del informe de errores del usuario en .net?
solución de Delphi: hace mucho tiempo, cuando yo era un programador delphi, he utilizado la siguiente técnica: en mi caminar excepción de aplicación en la pila y recoger direcciones. Luego, cuando recibo el informe de errores, utilicé una herramienta que reconstruye un seguimiento de pila válido con nombres de funciones y números de línea basados en las direcciones recopiladas y los archivos de símbolos correspondientes ubicados en MI máquina.
Pregunta: ¿Existe alguna lib, técnica o lo que sea para hacer lo mismo en .NET?
Actualización de estado: Muy interesante, que a menudo hacer una pregunta es la mejor manera de comenzar su propia investigación. Por ejemplo, pienso en este problema por algún tiempo, pero empiezo a buscar respuestas solo hace varios días.
Opción 1: MiniDumps. Después de mucho buscar en Google, he encontrado una forma de crear mini volcado desde el código y cómo recrear la pila desde el mini volcado administrado.
- montaje redistribuible para crear mini código de forma volcado - clrdump
- Blog post sobre el uso anterior asamblea - Creating and analyzing minidumps in .NET production applications
Esta solución, sin embargo necesidad de redistribuir dos conjuntos adicionales (~ 1 MB de tamaño), y mini dumps toma algo de espacio, y es incómodo para el usuario enviarlos por correo electrónico. Entonces para mis propósitos, en este momento, es inaceptable.
Opción 2: Gracias a weiqure por pista. Es posible extraer el desplazamiento IL gestionado para cada marco de pila. Ahora el problema es cómo obtener los números de línea de .pdb en función de estos desplazamientos. Y lo que he encontrado:
- PDB File Internals, sólo para información porque:
- ISymbolReader - interfaz administrada para leer los archivos de base de datos del programa
- y, finalmente, una tool to convert .pdb files to structured xml para facilitar el procesamiento de XPath
El uso de este herramienta, es posible crear archivos xml para cada compilación de lanzamiento y ponerlos en repository. Cuando se produce una excepción en la máquina del usuario, es posible crear un mensaje de error formateado con compensaciones IL. Entonces el usuario envía este mensaje (muy pequeño) por correo. Y finalmente, es posible crear una herramienta simple que recree la pila resultante del mensaje de error formateado.
Me pregunto por qué nadie más no implementa una herramienta como esta? No creo que esto sea interesante solo para mí.
FYI: En Delphi esto es fácil ahora porque está loco. Excepto que pone un rastro de pila y otras informaciones útiles en un informe sobre excepciones (no controladas). – schnaader
¿Qué opción eligió? Estoy buscando una solución yo también. – Giorgi
Elegí la segunda opción y escribí un montón de clases para reemplazar el volcado de excepción interno. También estoy planeando escribir un artículo sobre mi solución con toda la información y las fuentes. – arbiter