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
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.
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.
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
Sí, eso es cierto. Pero debe tener el archivo PDB para obtener esta información, ya que es allí donde el compilador la almacena. –
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.
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
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.
- 1. Números de línea incorrectos en el seguimiento de pila (versión)
- 2. IIS no proporciona números de línea en el seguimiento de pila aunque pdb presente
- 3. Excepción recurrente sin un seguimiento de pila: ¿cómo restablecerlo?
- 4. ¿Cuáles son los números en un seguimiento de pila .NET en una página de error ASPX?
- 5. Excepción sin seguimiento de pila en Java
- 6. ¿Qué significan los números en el seguimiento de pila?
- 7. "Excepción al cargar la aplicación" sin un seguimiento de pila
- 8. ¿Recrea el seguimiento de la pila con los números de línea del informe de errores del usuario en .net?
- 9. Cómo salida de un seguimiento de pila profunda en Node.js?
- 10. ¿Cómo obtengo un seguimiento de pila en OCaml?
- 11. número de línea incorrecta en seguimiento de la pila
- 12. Cómo obtener el seguimiento de la pila de un hilo
- 13. ¿Cómo puedo escribir un seguimiento de pila de excepción en Erlang después de atraparlo?
- 14. Encontrar el seguimiento de la pila real de Java desde un seguimiento de la pila de JavaScript
- 15. forja de un seguimiento de la pila en Java
- 16. ¿Cómo obtengo un seguimiento de pila en Windows sin usar dbghelp.dll?
- 17. En C#, ¿cómo puedo volver a lanzar InnerException sin perder el seguimiento de pila?
- 18. Obtención de un seguimiento de pila de SBT con Scala
- 19. Imprimir un seguimiento de pila de otro hilo
- 20. NullReferenceException, sin seguimiento de pila ... ¿por dónde empezar?
- 21. C# obtienen llamadas Método de Seguimiento de la pila Sin
- 22. ¿Cómo incluir archivos pdb en el instalador MSI para implementar junto con el resto de la aplicación?
- 23. ¿Qué significa esto en un seguimiento de pila?
- 24. ¿Hay alguna manera de volcar un seguimiento de pila sin lanzar una excepción en java?
- 25. ¿Cómo puedo configurar Visual Studio para que muestre un seguimiento de pila para excepciones de primera oportunidad?
- 26. Error de seguimiento de pila
- 27. ¿Puedo obtener las variables locales del método a través de un seguimiento de pila en C#?
- 28. Dado un desplazamiento de bloqueo, .PDB y fuente, ¿cómo puedo encontrar la línea de origen?
- 29. programación C# obtener Seguimiento de la pila
- 30. Impresión del seguimiento de pila desde un manejador de señal
¿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. –
Desafortunadamente, estos enlaces ya no funcionan. – Marc