GCC -g vs -g3 GDB Flag: ¿Cuál es la diferencia?


102

Al compilar el código fuente de C con gcc o Clang, siempre uso la -gbandera para generar información de depuración para gdb.

gcc -g -o helloworld helloworld.c

Me di cuenta de que algunas personas recomiendan en su -g3lugar. ¿Cuál es la diferencia entre las banderas -gy -g3? ¿También hay una diferencia entre -gy -ggdb?


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

Una abrumadora cantidad de preguntas sobre SO están "cubiertas por la documentación" siempre que esté dispuesto a profundizar lo suficiente. Esa no es una razón válida para descartar una pregunta.
— BeeOnRope

Respuestas:


104

De los documentos :

-gramo

Produzca información de depuración en el formato nativo del sistema operativo (puñaladas, COFF, XCOFF o DWARF 2). GDB puede trabajar con esta información de depuración. En la mayoría de los sistemas que utilizan el formato Stabs, -g habilita el uso de información de depuración adicional que solo GDB puede utilizar; esta información adicional hace que la depuración funcione mejor en GDB pero probablemente haga que otros depuradores se bloqueen o se nieguen a leer el programa. Si desea controlar con certeza si generar la información adicional, use -gstabs +, -gstabs, -gxcoff +, -gxcoff o -gvms (ver más abajo).

...


-ggdb

Genere información de depuración para que la utilice GDB. Esto significa utilizar el formato más expresivo disponible (DWARF 2, puñaladas o el formato nativo si ninguno de ellos es compatible), incluidas las extensiones de GDB si es posible.


-gvmslevel

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

....

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


8
¿Es posible explicar todavía cuál es la diferencia entre, por ejemplo, "formato más expresivo" e "información extra"? ¿Son estos parámetros complementarios? Muchos de ellos mencionan GDB ... ¡Gracias!
— rogerdpack

28

tl; dr: Para responder a su pregunta específica, -g3"incluye información adicional como definiciones de macros ... Algunos depuradores admiten la expansión de macros cuando se utiliza -g3", mientras -gque no incluye esta información adicional.

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 -ges equivalente a -g2. Curiosamente, los documentos de gcc dicen poco sobre qué información -g/ -g2incluye o excluye:

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

El nivel 1 produce información mínima, suficiente para realizar rastreos en partes del programa que no planea 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 la expansión de macros cuando usa -g3.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.