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?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top