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.