Saltar al contenido

¿Debo compilar compilaciones de lanzamiento con información de depuración como "completa" o "solo pdb"?

Traemos la mejor información que hemos encontrado por todo internet. Nosotros esperamos que te sea de mucha utilidad y si deseas comentarnos algo que nos pueda ayudar a perfeccionar nuestra información siente la libertad de hacerlo..

Solución:

construiría con pdb-only. No podrá adjuntar un depurador al producto lanzado, pero si obtiene un volcado de memoria, puede usar Visual Studio o WinDBG para examinar los seguimientos de la pila y los volcados de memoria en el momento del bloqueo.

si vas con full en vez de pdb-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 sus clientes.

Asegúrese de guardar los archivos PDB en algún lugar para que pueda consultarlos cuando llegue un informe de bloqueo. 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ás ningún recurso cuando haya un choque en el campo. No podrá realizar ningún tipo de examen a posteriori del accidente, lo que podría dificultar gravemente su capacidad para localizar el problema.

Una nota sobre el rendimiento:

Tanto John Robbins como Eric Lippert han escrito entradas de blog sobre la /debug bandera, y ambos indican que esta configuración tiene cero impacto en el rendimiento. hay un separado /optimize indicador que dicta si el compilador debe realizar optimizaciones.

ADVERTENCIA
¡La documentación de MSDN para el cambio /debug (en Visual Studio es Debug Info) parece estar desactualizada! Esto es lo que tiene que es incorrecto

Si usa / depurar:completo, tenga en cuenta que hay cierto impacto en la velocidad y el tamaño del código optimizado JIT y un pequeño impacto en la calidad del código con /debug:completo. Recomendamos / depurar:pdbonly o ningún PDB para generar código de liberación.

Una diferencia entre /debug:pdbonly y /depurar:completo es que con /debug:full el compilador emite un DebuggableAttribute, que se usa para decirle al compilador JIT que la información de depuración está disponible.

Entonces, ¿qué es true ¿ahora?

  1. solo pdb – Antes de .NET 2.0, ayudaba a investigar los volcados de memoria del producto lanzado (máquinas de los clientes). Pero no dejaba adjuntar el depurador. Este no es el caso de .NET 2.0. Está exactamente igual que Completo.
  2. Completo – Esto nos ayuda a investigar los volcados de memoria y también nos permite adjuntar un depurador a la compilación de lanzamiento. Pero a diferencia de las menciones de MSDN, no afecta el rendimiento (desde .NET 2.0). Hace exactamente lo mismo que solo pdb.

Si son exactamente iguales, ¿por qué tenemos estas opciones? John Robbins (dios de la depuración de Windows) descubrió que están ahí por razones históricas.

En .NET 1.0 había diferencias, pero en .NET 2.0 no las hay. Parece que .NET 4.0 seguirá el mismo patrón. Después de verificar dos veces con el equipo de depuración de CLR, no hay ninguna diferencia.

Lo que controla si JITter realiza una compilación de depuración es el modificador /optimize. <…>

La conclusión es que desea crear sus compilaciones de lanzamiento con /optimize+ y cualquiera de los modificadores /debug para que pueda depurar con el código fuente.

luego pasa a demostrarlo.

Ahora la optimización es parte de un interruptor separado /optimize (en visual studio se llama Optimize code).

En resumen, independientemente de la configuración de DebugInfo pdb-only o full, tendremos los mismos resultados. La recomendación es evitar Ninguna ya que le privaría de poder analizar los volcados de memoria del producto lanzado o adjuntar el depurador.

Solo querrá PDB, pero no querrá dar los archivos PDB a los usuarios. Sin embargo, tenerlos para usted, junto con sus archivos binarios, le permite cargar volcados de memoria 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 [Debuggable] attribute a su código. Esto tiene un gran impacto en la velocidad. Por ejemplo, algunas optimizaciones de bucle pueden desactivarse para facilitar el paso único. Además, tiene un pequeño efecto en el proceso JIT, ya que activa el seguimiento.

Comentarios y calificaciones del tutorial

Eres capaz de añadir valor a nuestro contenido aportando tu experiencia en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.