web-dev-qa-db-fra.com

GCC -g vs -g3 Drapeau GDB: quelle est la différence?

Lors de la compilation du code source C avec gcc ou Clang, j’utilise toujours le -g drapeau pour générer des informations de débogage pour gdb.

gcc -g -o helloworld helloworld.c

J'ai remarqué que certaines personnes recommandent -g3 au lieu. Quelle est la différence entre le -g et -g3 drapeaux? Il y a aussi une différence entre -g et -ggdb?

87
haziz

De la docs :

-g

Produisez des informations de débogage au format natif du système d'exploitation (stabs, COFF, XCOFF ou DWARF 2). GDB peut utiliser ces informations de débogage. Sur la plupart des systèmes qui utilisent le format stabs, -g permet d'utiliser des informations de débogage supplémentaires que seul GDB peut utiliser. Ces informations supplémentaires améliorent le débogage dans GDB, mais font probablement planter les autres débogueurs ou refuser de lire le programme. Si vous voulez savoir avec certitude si vous souhaitez générer des informations supplémentaires, utilisez -gstabs +, -gstabs, -gxcoff +, -gxcoff ou -gvms (voir ci-dessous).

...


-ggdb

Produire des informations de débogage pour une utilisation par GDB. Cela signifie utiliser le format le plus expressif disponible (DWARF 2, stabs ou le format natif si aucun de ceux-ci n'est pris en charge), y compris, dans la mesure du possible, les extensions GDB.


-gvmslevel

Demander des informations de débogage et également utiliser le niveau pour spécifier la quantité d'informations. Le niveau par défaut est 2. Le niveau 0 ne produit aucune information de débogage. Ainsi, -g0 nie -g.

....

Le niveau 3 inclut des informations supplémentaires, telles que toutes les définitions de macro présentes dans le programme. Certains débogueurs prennent en charge le développement de macros lorsque vous utilisez -g3.

89
MByD

tl; dr: Pour répondre à votre question spécifique, -g3 "inclut des informations supplémentaires telles que les définitions de macro. Certains débogueurs prennent en charge le développement de macros lorsque vous utilisez -g3", tandis que -g n'inclut pas cette information supplémentaire.

La réponse plus large est que gcc prend en charge quatre niveaux d’informations de débogage, de -g0 (informations de débogage désactivées) via -g3 (informations de débogage maximales).

En précisant -g est équivalent à -g2. Curieusement, les docs gcc en disent peu sur les informations -g/-g2 inclut ou exclut:

Demander des informations de débogage et également utiliser le niveau pour spécifier la quantité d'informations. Le niveau par défaut est 2. Le niveau 0 ne produit aucune information de débogage. Ainsi, -g0 nie -g.

Le niveau 1 produit un minimum d'informations, suffisant pour créer des traces dans des parties du programme que vous ne prévoyez pas de déboguer. Cela inclut des descriptions de fonctions et de variables externes, ainsi que des tableaux de numéros de ligne, mais aucune information sur les variables locales.

Le niveau 3 inclut des informations supplémentaires, telles que toutes les définitions de macro présentes dans le programme. Certains débogueurs prennent en charge le développement de macros lorsque vous utilisez -g3.

22
U007D