Отладчик компилятора GNU 'Level' - PullRequest
0 голосов
/ 01 января 2009

Просматривая различные переключатели опций для моего компилятора (GNU C ++ 3.2.3 поддерживается моей организацией для данной аппаратной конфигурации), я наткнулся на это:

-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.

Я скомпилировал тестовую программу с несколькими макросами (такими как цикл, if-then-else для аргумента), затем попробовал коммерческий отладчик TotalView и GDB в скомпилированном коде -g3. Я не увидел никакой разницы (макросы не были расширены до исходного кода, я не мог «войти» в макросы и т. Д.).

Кто-нибудь здесь имел опыт получения дополнительных функций отладки с помощью -g3 на компиляторах GNU?

Ответы [ 2 ]

3 голосов
/ 06 января 2009

Ваш вопрос подразумевает, что вы не понимаете, что такое макросы. Конечно Вы не можете войти в макрос.

-g3 весьма полезен для "макро-тяжелых" программ. Рассмотрим:

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;
}

Без -g3, когда вы останавливаетесь на строке 7 или 10, вам, возможно, придется много искать для определения A (), и таких определений может быть много, поэтому вам придется выяснить, какое из них является "текущим".

С помощью -g3 GDB может выполнить тяжелую работу за вас:

(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
2 голосов
/ 01 января 2009

Я пытался -g3 выключать и включать с 1992 года , и у меня никогда не получалось сделать что-нибудь полезное .

...