Niveau de débogage du compilateur GNU
Question
Tout en parcourant les différents commutateurs d'options de mon compilateur (GNU C ++ 3.2.3 est pris en charge par mon organisation pour la configuration matérielle donnée), j'ai rencontré ceci:
-glevel
:
Level 3 includes extra information, such as all the macro definitions
present in the program. Some debuggers support macro expansion when
you use -g3.
J'ai compilé un programme de test avec quelques macros (comme une boucle, un if-then-else sur un argument), puis essayé le débogueur commercial TotalView et GDB sur le code compilé -g3. Je ne voyais aucune différence (les macros n'étaient pas étendues à leur code d'origine, je ne pouvais pas "entrer dans" les macros, etc.).
Quelqu'un ici a-t-il eu l'expérience d'obtenir des "fonctionnalités" de débogage supplémentaires en utilisant -g3 sur des compilateurs GNU?
La solution
Votre question semble impliquer que vous ne comprenez pas ce que sont les macros. Bien sûr vous ne pouvez pas entrer dans une macro.
Le -g3 est très utile pour "macro lourde" programmes. Considérez:
int main()
{
int i;
for (i = 0; i < 20; ++i) {
#define A(x) case x: printf(#x "\n"); break
switch(i) {
A(1); A(2); A(3); A(4); /* line 7 */
#undef A
#define A(x) case 10+x: printf("10+" #x "\n"); break
A(1); A(2); /* line 10 */
}
}
return 0;
}
Sans -g3, lorsque vous êtes arrêté à la ligne 7 ou 10, vous devrez peut-être chercher beaucoup de choses pour la définition de A (), et il pourrait y en avoir beaucoup, de sorte que vous devrez alors déterminer laquelle est "courant".
Avec -g3, GDB peut faire le gros du travail pour vous:
(gdb) b 7
Breakpoint 1 at 0x4004cc: file m.c, line 7.
(gdb) b 10
Breakpoint 2 at 0x4004fc: file m.c, line 10.
(gdb) r
Breakpoint 1, main () at m.c:7
7 A(1); A(2); A(3); A(4);
(gdb) info macro A
Defined at /tmp/m.c:5
#define A(x) case x: printf(#x "\n"); break
(gdb) c
1
2
3
4
Breakpoint 2, main () at m.c:10
10 A(1); A(2);
(gdb) info macro A
Defined at /tmp/m.c:9
#define A(x) case 10+x: printf("10+" #x "\n"); break
(gdb) q
Autres conseils
J'ai essayé de -g3
par intermittence depuis 1992 et je ne l'ai jamais fait faire quelque chose d'utile .