En Visual Studio 2010 para un proyecto de C #, si va a Propiedades del proyecto> Compilación> Avanzado> Información de depuración, tiene tres opciones: ninguna, completa o solo pdb. Según la respuesta a esta pregunta , creo que entiendo algunas de las diferencias entre full y pdb-only. Sin embargo, ¿cuál es más apropiado para una versión de lanzamiento? Si utilizo "completo", ¿habrá ramificaciones de rendimiento? Si utilizo "solo pdb", ¿será más difícil depurar problemas de producción?
¿Cuál es la diferencia entre "full" y "pdbonly"? https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option
c#
visual-studio
debugging
build
debug-symbols
RationalGeek
fuente
fuente
Respuestas:
Construiría con
pdb-only
. No podrá adjuntar un depurador al producto publicado, pero si obtiene un volcado por caída, puede usar Visual Studio o WinDBG para examinar los seguimientos de pila y volcados de memoria en el momento del bloqueo.Si elige en
full
lugar depdb-only
, obtendrá los mismos beneficios, excepto que el ejecutable se puede adjuntar directamente a un depurador. Deberá determinar si esto es razonable dado su producto y clientes.Asegúrese de guardar los archivos PDB en algún lugar para que pueda hacer referencia a ellos cuando llegue un informe de fallas. Si puede configurar un servidor de símbolos para almacenar esos símbolos de depuración, mucho mejor.
Si opta por construir con
none
, no tendrá ningún recurso cuando haya un accidente en el campo. No podrá hacer ningún tipo de examen posterior del accidente, lo que podría obstaculizar gravemente su capacidad para localizar el problema.Una nota sobre el rendimiento:
Tanto John Robbins como Eric Lippert han escrito publicaciones de blog sobre la
/debug
bandera y ambos indican que esta configuración tiene un impacto cero en el rendimiento . Hay una/optimize
bandera separada que dicta si el compilador debe realizar optimizaciones.fuente
If you use /debug:full, be aware that there is some impact on the speed and size of JIT optimized code and a small impact on code quality with /debug:full. We recommend /debug:pdbonly or no PDB for generating release code.
ADVERTENCIA La documentación de MSDN para el modificador / debug (en Visual Studio es Información de depuración) parece estar desactualizada. Esto es lo que tiene que es incorrecto
Entonces, ¿qué es verdad ahora?
Si son exactamente iguales, ¿por qué tenemos estas opciones? John Robbins (dios de la depuración de Windows) descubrió que estos están ahí por razones históricas.
luego pasa a demostrarlo.
Ahora la optimización es parte de un cambio separado
/optimize
(en Visual Studio se llamaOptimize code
).En resumen, independientemente de la configuración de DebugInfo como pdb-only o full, obtendremos los mismos resultados. La recomendación es evitar Ninguno, ya que le privaría de poder analizar los volcados por caída del producto lanzado o adjuntar el depurador.
fuente
Release
el tipo de depuración de configuración predeterminado enpdbonly
.Solo querrá PDB, pero no querrá dar los archivos PDB a los usuarios. Sin embargo, tenerlos para usted, junto con sus binarios, le brinda la capacidad de cargar volcados de emergencia en un depurador como WinDbg y ver dónde falló realmente su programa. Esto puede ser bastante útil cuando su código falla en una máquina a la que no tiene acceso.
La depuración completa agrega el atributo [Debuggable] a su código. Esto tiene un gran impacto en la velocidad. Por ejemplo, algunas optimizaciones de bucle pueden deshabilitarse para facilitar el paso único. Además, tiene un pequeño efecto en el proceso JIT, ya que activa el seguimiento.
fuente
Estoy en el proceso de escribir un controlador de excepciones no controlado y el seguimiento de la pila incluye el número de línea cuando se usa solo pdb; de lo contrario, obtengo el nombre de la Sub / Función cuando elijo Ninguno.
Si no distribuyo el .pdb, no obtengo el número de línea en el seguimiento de la pila, incluso con la compilación de solo pdb.
Entonces, estoy distribuyendo (implementación de XCOPY en una LAN) el pdb junto con el exe de mi aplicación VB.
fuente