2008-10-20 17 views
16

me he dado cuenta que cuando se genera un nuevo proyecto C++ utilizando Microsoft Visual Studio 2008, el lanzamiento generación contiene los símbolos de depuración - específicamente los siguientes ajustes están habilitados:Visual C++ 2008 build 'Release' contiene información de depuración

  • El C++ Formato/general/Información de depuración se establece en la base de datos Programa.
  • /Generar configuración de información de depuración del enlazador/Depuración se establece en Sí .

Nunca me he dado cuenta de esto en versiones anteriores de Visual Studio.

Así, aparte de la generación de un archivo EXE más grande, ¿hay alguna desventaja de dejar estos ajustes permitido?

+0

Aclare si realmente tiene archivos EXE más grandes o (si es que lo sugiere Dave Van den Eynde) toda la información adicional irá al archivo PDB. –

+1

Esto también es válido para VC10 ... – Gob00st

Respuesta

32

Hemos convertido en aquellas configuraciones en nuestros lanzamientos comerciales desde hace años sin ningún inconveniente aparente. Los upsides son enormes, sin embargo.

Hemos integrado un empaquetador de volcado que empaqueta el vertedero junto con alguna otra información y mensajes de correo electrónico que (con el consentimiento del usuario) a una bandeja de entrada de la empresa. Esto ha ayudado a encontrar problemas que habrían tenido siempre nos para reproducir y encontramos lo contrario.

Aunque es un poco fuera de tema, aquí hay un enlace a una excelente alguien contribución que le proporciona una manera fácil de incluir un reportero de choque para una aplicación de C++/Windows: http://www.codeproject.com/KB/debug/crash_report.aspx

Nota: Sería conveniente, sin embargo, no incluir el archivo PDB con su lanzamiento. Dicho esto, debe mantener el archivo PDB que coincida con su versión lanzada para que pueda corregir correctamente el problema en el futuro. Si se utiliza un archivo PDB que no fue construido con el mismo código que construyó el exe, la pila que verá cuando intente depurar el dmp será incorrecta.

+1

En una pregunta similar unos años más tarde, la siguiente respuesta dio algunos detalles más: http://stackoverflow.com/a/6364789/2937955 (vea la nota interesante sobre el reverso) ingeniería y/opción PDBSTRIPPED) – FlorianT

2

Bueno, usted podría ofrecer esta información de depuración y alguien podría utilizarlo para desmontar el código. Para algunas personas temerosas, esto solo podría ser una razón para no dejarlo así.

Personalmente, creo que a veces es útil tener información de depuración disponible para la versión de lanzamiento, de esta manera es mucho más fácil analizar un volcado de choque, que será almacenado por el Dr. Watson en caso de fallas en la aplicación.
Encontré algunos errores muy oscuros de esta manera.

2

Tener estas opciones en no necesariamente hace que los ejecutables más grande. La información de depuración se almacena en un archivo separado, con la extensión PDB. Tener información de depuración disponible nunca es una mala idea, a menos que realmente tenga poco espacio libre de almacenamiento.

Quizás es por eso que son de forma predeterminada: no perjudiquen a los ejecutables. Las compilaciones de versión utilizan optimizaciones como la creación de funciones y la generación de código optimizado, lo que hace que sea más difícil pasar, mientras que las versiones de depuración tienen estas opciones desactivadas.

Sin desventaja aquí.

de Dave

0

El .exe será ligeramente mayor debido a una referencia al archivo .pdb (es decir, una ruta adicional). Eso es todo.

1

Añadir el modificador/Zi crea un archivo .exe más grande además del PDB. Sin embargo, puede vincularse por separado con/OPT: REF para mantener el tamaño del archivo .exe al mínimo.

+0

En Visual Studio 2008, esta configuración se encuentra en "Propiedades-> Enlazador-> Optimización-> Referencias". También podría considerar habilitar "Habilitar plegado COMDAT", que también reducirá el tamaño del binario. – John

4

Están activados de forma predeterminada porque:

  1. Si no se crea ahora, no se puede crear más adelante.
  2. Los necesita.

Habilitar la información de depuración en Visual C++ hace que se agregue una pequeña entrada al encabezado binario, identificando el PDB para este binario. Es demasiado pequeño para ser de cualquier tamaño, y no contiene ningún secreto útil que pueda estar interesado en compartir.

(RSDS La entrada de la cabecera está marcada?: ¿Quién puede adivinar por qué)

Por supuesto, esos PDBs usarán más espacio en disco en su máquina de construcción/de las copias de seguridad. Tratar con él. Necesitas esos PDB cuando llega el momento de depurar algo.

Cuestiones relacionadas