2012-05-06 17 views
58

Al compilar el código fuente C con gcc o Clang, siempre uso el indicador -g para generar información de depuración para gdb.GCC -g vs -g3 Bandera GDB: ¿Cuál es la diferencia?

gcc -g -o helloworld helloworld.c

he notado que algunas personas recomiendan -g3 lugar. ¿Cuál es la diferencia entre los indicadores -g y -g3? ¿También hay una diferencia entre -g y -ggdb?

+7

¿Qué desea saber que no está cubierto por la documentación? –

+7

Vine aquí porque estoy usando el archivo MAKE de otra persona, y la documentación es una bestia para empezar. Buena pregunta para tener en StackOverflow para encontrar una respuesta fácil de google. – GreenAsJade

Respuesta

64

Desde el docs:

-g

Producir información de depuración en el formato nativo del sistema operativo (puñaladas, COFF, XCOFF o ENANO 2). GDB puede trabajar con esta información de depuración . En la mayoría de los sistemas que usan el formato de stabs, -g permite el uso de información de depuración adicional que solo GDB puede usar; esta información adicional hace que la depuración funcione mejor en GDB, pero probablemente hace que otros depuradores se cuelguen o se nieguen a leer el programa. Si desea para controlar con certeza si desea generar información adicional, use -stabs +, -gstabs, -gxcoff +, -gxcoff o -gvms (consulte a continuación).

...


-ggdb

Producir información de depuración para su uso por el BGF. Esto significa utilizar el formato más expresivo disponible (DWARF 2, stabs o el formato nativo si ninguno de los dos es compatible), incluidas las extensiones GDB si es posible.


-gvmslevel

Solicitud de información de depuración y también utilizar el nivel para especificar la cantidad de información. El nivel predeterminado es 2. El nivel 0 no produce ninguna información de depuración . Por lo tanto, -g0 niega -g.

....

Nivel 3 incluye información adicional, como todas las definiciones de macro presente en el programa. Algunos depuradores admiten la expansión de macro cuando utiliza -g3.

+5

Posible explicar aún cuál es la diferencia entre, por ejemplo, "formato más expresivo" e "información adicional"? ¿Son estos parámetros complementarios? Muchos de ellos mencionan a GDB ... ¡Gracias! – rogerdpack

8

tl; dr: Para responder a su pregunta específica, -g3 "incluye información adicional, como las definiciones de macros Algunos depuradores apoyan la expansión de macros cuando se utiliza -g3.", Mientras que -g no.

La respuesta más amplia es que gcc admite cuatro niveles de información de depuración, desde -g0 (información de depuración desactivada) hasta -g3 (información de depuración máxima).

Especificar -g es equivalente a -g2. Curiosamente, el gcc docs dice poco acerca de qué información incluye o excluye -g/-g2.

Solicite información de depuración y también use el nivel para especificar la cantidad de información. El nivel predeterminado es 2. El nivel 0 no produce información de depuración. Por lo tanto, -g0 niega -g.

El nivel 1 produce información mínima, suficiente para realizar trazas inversas en partes del programa que no tiene previsto depurar. Esto incluye descripciones de funciones y variables externas, y tablas de números de línea, pero no información sobre variables locales.

El nivel 3 incluye información adicional, como todas las definiciones de macro presentes en el programa. Algunos depuradores admiten macro expansión cuando usa -g3.

Cuestiones relacionadas