2008-09-03 16 views
16

¿Cuándo debería incluir archivos PDB para una versión de producción? ¿Debo usar la bandera Optimize code y cómo afectaría eso la información que obtengo de una excepción?Archivos PDB para la aplicación de producción y el indicador "Optimizar código"

Si hay un beneficio notable en el rendimiento, me gustaría utilizar las optimizaciones, pero si no, prefiero tener información de depuración precisa. ¿Qué se suele hacer para una aplicación de producción?

+0

Ver la comparación de opciones en http://blog.vuscode.com/malovicn/archive/2007/08/05/releasing-the-build.aspx –

Respuesta

19

Cuando desee ver los nombres de los archivos de origen y los números de línea en sus stacktraces, genere PDB utilizando la opción pdb-only. La optimización es independiente de la generación de PDB, es decir, puede optimizar y generando PDB sin un golpe de rendimiento.

De the C# Language Reference

Si utiliza/debug: completa, tenga en cuenta que hay un cierto impacto en la velocidad y el tamaño de código JIT optimizado y un pequeño impacto en la calidad del código con/debug: full. Recomendamos/depuramos: pdbonly o no PDB para generar código de lanzamiento.

3

No hay necesidad de incluirlos en su distribución, pero definitivamente debe construirlos y conservarlos. De lo contrario, la depuración de un volcado de emergencia es prácticamente imposible.

También activaría las optimizaciones. Si bien dificulta la depuración, las ganancias de rendimiento generalmente no son triviales, dependiendo de la naturaleza de la aplicación. Vemos fácilmente un rendimiento superior a 10x en las compilaciones de versión frente a depuración para algunos algoritmos.

+0

Copiar los PDB en producción es una buena idea (al menos para los sitios web) Consulte http://stackoverflow.com/questions/933883/are-herehere-any-security-issues-leaving-the-pdb-debug-files-on-the-live-servers BTW, si incluye PDB con sus implementaciones, no necesita guardarlas en un lugar separado, como un servidor de símbolos –

16

Para responder a su primera pregunta, solo necesita incluir PDB para una versión de producción si necesita números de línea para sus informes de excepción.

Para responder a su segunda pregunta, utilizar el indicador "Optimizar" con PDB significa que cualquier stack "collapse" will be reflected in the stack trace. No estoy seguro de si el número de línea real reportado puede estar equivocado, esto necesita más investigación.

Para responder a su tercera pregunta, puede obtener lo mejor de ambos mundos con un truco bastante bueno. Las principales diferencias entre la versión de depuración predeterminada y la versión de lanzamiento predeterminada son que cuando se realiza una versión de lanzamiento predeterminada, la optimización se activa y los símbolos de depuración no se emiten. Por lo tanto, en cuatro pasos:

  1. Cambie su configuración de lanzamiento para emitir símbolos de depuración. Esto prácticamente no tiene ningún efecto en el rendimiento de su aplicación, y es muy útil si (¿cuándo?) Necesita depurar una versión de lanzamiento de su aplicación.

  2. Compilar usando su nueva configuración comunicado de acumulación, es decir con símbolos de depuración y con optimización. Tenga en cuenta que el 99% de la optimización del código la realiza el compilador JIT, no el compilador del lenguaje.

  3. Cree un archivo de texto en la carpeta de su aplicación llamada xxxx.exe.ini (o dll o lo que sea), donde xxxx es el nombre de su ejecutable. Este archivo de texto debe ser inicialmente como:

    [.NET Framework Debugging Control] 
    GenerateTrackingInfo=0 
    AllowOptimize=1 
    
  4. Con estos ajustes, su aplicación se ejecuta a toda velocidad.Cuando se desea depurar su aplicación mediante la activación de seguimiento de depuración y, posiblemente, apagar (CIL) la optimización del código, sólo tiene que utilizar los siguientes ajustes:

    [.NET Framework Debugging Control] 
    GenerateTrackingInfo=1 
    AllowOptimize=0 
    

EDITAR De acuerdo con el comentario de ojo de gato, this can also work in a hosted environment como ASP .RED.

+0

> Para responder a su segunda pregunta, usar el indicador "Optimizar" con PDBs> significa que esos números de línea podrían estar apagados por unas pocas líneas. ¿Estás seguro de que esto es cierto? – Karsten

+0

No, no estoy seguro. He corregido mi respuesta para reflejar una diferencia de la que estoy seguro (colapso de la pila). Necesito investigar la teoría de la diferencia de línea con más detalle. – RoadWarrior

+0

Debe atribuir su fuente: Scott Hanselman http://www.hanselman.com/blog/DebugVsReleaseTheBestOfBothWorlds.aspx –

Cuestiones relacionadas