2012-06-11 9 views
11

Para dar un poco de contexto, estoy hablando de compilar el código C++ con g ++ aquí.g ++ - ¿está usando la bandera "-g" para las construcciones de producción una buena idea?

Veo cómo incluir la bandera -g para compilaciones de producción sería conveniente para el mantenimiento: el programa será mucho más fácil de depurar si falla inesperadamente.

Mi pregunta aquí es, ¿la inclusión del distintivo -g afecta al ejecutable de salida de otra manera que no sea aumentar su tamaño? ¿Puede de algún modo hacer que el código sea más lento (por ejemplo, desactivando ciertas optimizaciones)?

Por lo que entiendo, no debería (la documentación solo menciona la inclusión de símbolos de depuración), pero no estoy seguro.

Respuesta

13

El indicador -g no afecta la generación de código, solo se modifican la tabla de símbolos y los metadatos de depuración. Esos no viven en la sección de código ejecutable, por lo que ni siquiera afectarán el rendimiento cuando el código se ejecuta fuera de hte depurador.

4

Recuerdo haber leído que algunas optimizaciones se apagan con símbolos de depuración: How Does The Debugging Option -g Change the Binary Executable?

Googling muestra también más puestos relacionados con este tema.

No creo que realmente le afecte a menos que su código sea muy sensible al rendimiento; y, aparte de eso, no conozco ninguna desventaja de la parte superior de mi cabeza (que no sean binarios más grandes).

+2

Al leer estos documentos, solo los compiladores que no sean gcc tienen optimizaciones afectadas por -g. Mi experiencia es que para gcc va en la otra dirección: lo que se puede ver y hacer en el depurador se ve afectado por las optimizaciones, a veces severamente. Por supuesto, esto es lo que esperarías de la optimización agresiva: no puedes depurar lo que no está allí. – Gene

+0

@Gene: Oh, ya veo ... interesante, gracias por señalarlo. ¡Entonces parece que fui yo quien estaba equivocado sobre GCC! – Mehrdad

0

Mi pregunta aquí es, ¿la inclusión del distintivo -g afecta al ejecutable de salida de otra forma que no sea aumentar su tamaño?

No, es perfectamente posible producir binarios optimizados con información, que no afecta al código normal de ninguna manera la depuración (aunque esa información podría ser menos útil, ya que las variables no tienen por qué existen, a veces, las funciones en línea son más difíciles de depurar, etc.)

La distribución de Debian crea paquetes con información de depuración, que se elimina más adelante (a veces se divide en un "paquete de depuración").

Sin embargo, tenga en cuenta que el aumento de tamaño puede ser bastante grande.

Cuestiones relacionadas