2009-08-25 16 views
28

Actualmente estamos distribuyendo una aplicación WinForms sin archivos .pdb para ahorrar espacio en las máquinas cliente y descargar ancho de banda. Cuando tenemos rastros de pila, obtenemos nombres de métodos pero no números de línea. ¿Hay alguna manera de obtener los números de línea sin recurrir a la distribución de los archivos .pdb?¿Cómo puedo incluir números de línea en un seguimiento de pila sin un pdb?

Respuesta

33

No puede obtener un seguimiento de pila con los números de línea directamente desde su aplicación a menos que agrupe el PDB. Sin embargo,, si tiene los archivos PDB para la misma versión de la aplicación que envía a sus clientes, y no le importa algunas secuencias de comandos ligeras, entonces puede convertir el seguimiento de la pila .NET y los desplazamientos IL nuevamente en Línea de números.

Durante su proceso de compilación, use Mike Stall's pdb2xml converter, distribuido como parte de su excelente MDbg managed code debugger, y guárdelos en un lugar seguro (por ejemplo, control de fuente). Cuando obtiene un seguimiento de la pila desde el cliente, puede consultar el desplazamiento IL desde los datos XML para determinar el número de línea relevante. Si tus seguimientos de pila se envían a un sitio web, incluso puedes automatizar la conversión, de modo que los desarrolladores ya estén obteniendo los rastros de pila completamente detallados para cuando los casos lleguen a su bandeja de entrada.

+0

¿Podría usted o alguien más poner Pdb2Xml.exe en algún lugar de la red? Supongo que también se puede usar para código no administrado, y no tengo un compilador de C#. Pero solo encuentro las fuentes. Parece ser una gran herramienta. –

+0

Desafortunadamente, estos enlaces ya no funcionan. – Marc

8

No. Los números de línea son parte de la información de depuración, que solo se almacena en el archivo PDB. Esa es la razón por la cual los archivos PDB existen en primer lugar.

+2

No tiene que enviar el archivo PDB para * tener * el archivo PDB. Siempre que lo almacene en algún lugar cuando construya, puede consultarlo cuando obtenga el seguimiento de la pila. Ver http://stackoverflow.com/questions/1328836/include-line-numbers-in-stack-trace-without-pdb/1328915#1328915 – tghw

+0

Sí, eso es cierto. Pero debe tener el archivo PDB para obtener esta información, ya que es allí donde el compilador la almacena. –

0

No, no hay. Toda la información necesaria para mapear líneas de IL al archivo fuente original y al número de línea se almacenan dentro del AP. No es posible obtener esa información en el seguimiento de la pila sin el PDB.

+0

Estoy muy seguro de que puedo escribir una versión mucho más pequeña de compensación de IL a los números de línea que estaría presente en un archivo PDB. – Joshua

1

No es la respuesta adecuada para tu pregunta, pero tengo una sugerencia. Podría incorporar un mecanismo de registro y obtener estos archivos de registro junto con los rastreos de la pila. Si incluye números de línea en sus mensajes de registro, puede combinar la información de registro con su seguimiento de pila manualmente.

Si no quiere ocupar mucho espacio, puede usar archivos de registro de tamaño limitado, de esta manera solo se conservarán los mensajes de registro más recientes.

Utilizamos la biblioteca de log4net para nuestras necesidades de registro, le recomiendo que eche un vistazo.

Cuestiones relacionadas