c debugging gcc gdb clang

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



debugging clang (2)

De los docs :

-gramo

Produzca información de depuración en el formato nativo del sistema operativo (stabs, COFF, XCOFF o DWARF 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 controlar con certeza si generar la información adicional, use -gstabs +, -gstabs, -gxcoff +, -gxcoff o -gvms (consulte a continuación).

...

-ggdb

Produzca información de depuración para su uso por GDB. Esto significa utilizar el formato más expresivo disponible (DWARF 2, stabs 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 nivel para especificar cuánta información. El nivel predeterminado es 2. El nivel 0 no genera información de depuración. Por lo tanto, -g0 niega -g.

....

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.

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 -o helloworld helloworld.c

Noté que algunas personas recomiendan -g3 lugar. ¿Cuál es la diferencia entre las banderas -g y -g3 ? ¿También hay una diferencia entre -g y -ggdb ?


tl; dr: para responder a su pregunta específica, " -g3 " incluye información adicional, como las definiciones de macro. Algunos depuradores admiten la expansión de macro cuando se utiliza -g3 ", mientras que -g 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 máxima de depuración).

Especificar -g es equivalente a -g2 . Curiosamente, los docs dicen poco sobre qué información -g / -g2 incluye o excluye:

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

El nivel 1 produce información mínima, suficiente para hacer trazas inversas en partes del programa que no planeas 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.