2011-06-06 13 views
8

Tengo un ejecutable de código C para Linux.¿Hay inconveniente en edificio con -O -g y tiras vs. edificio únicamente con -O

Para su difusión, que puede tener dos opciones:

Una es construir con -O3 -g, tira de la depuración (tira -g) y enviar la salida como la liberación. En segundo lugar, compila la versión directamente con -O3.

La ventaja de la primera opción, si he entendido bien, es que puedo utilizar el exe antes de la extracción para la depuración remota o para analizar volcados de memoria.

La pregunta es si hay alguna desventaja en este approachi.e., Es el tiempo de ejecución no sobrecarga en el rendimiento de la construcción con -g y luego pelar

gracias.

+0

Tenga en cuenta que no se permite la optimización de reescribir su código en gran medida el tiempo que es semánticamente el mismo; y lo hace muy agresivamente. De modo que incluso con la información de depuración presente, el código compilado puede no coincidir muy bien con el código fuente, lo que hace que la depuración sea "desafiante". Eche un vistazo a la documentación de los diversos switches de optimización individuales en GCC para tener una idea de cuánto código puede cambiar. – Carsten

+0

Gracias. Soy consciente de este problema, pero aún así es más fácil depurar esto que depurar el ejecutable optimizado. – eran

Respuesta

8

No hay ningún impacto en el rendimiento en tiempo de ejecución para el uso de -g. La información de depuración vive en una sección separada del ejecutable, que ni siquiera se cargará si ejecuta el archivo.

Pero se puede separar información y ejecutables de depuración si lo desea (que todavía no hará ninguna diferencia de rendimiento). Mi Gentoo Linux lo maneja de esta manera, la razón es simplemente minimizar el espacio de disco usado que me permite tener todos los binarios en un pequeño disco rápido y al mismo tiempo mantener la información de depuración, que casi nunca se usa, en una partición separada.

objcopy --only-keep-debug foo foo.debug 
strip -g foo 

Ahora usted tiene un archivo ejecutable foo y una foo.debug que contiene los símbolos de depuración.

+0

¿Depurar información en una partición separada? Bastante duro. 1 –

+0

@Haendel: en el ciclo de vida de todos, la tecnología más reciente disco más rápido, hay un breve período en el que el precio de un disco suficientemente grande como para contener una instalación del sistema operativo es doloroso ;-) También, el más pequeño y más barato el dispositivo, el este período dura más, ya que el costo del elegante disco rápido se compara más con el costo general. –

+0

Una ventaja más atractiva de esto es que las distribuciones tienen un paquete con solo binarios y otro paquete con solo información de depuración. Solo unos pocos usuarios tienen que descargar el segundo, y para ellos, es mucho mejor que descargar un paquete separado con binary + debug que tenga que reemplazar el anterior. – Juliano

Cuestiones relacionadas