[CLOSED]gdb не показывает локальные переменные в программах на с и c++

Volshebnaya

То есть происходит следующее:
(gdb) p i
No symbol "i" in current context.

(i - локальная переменная в main, инициализированная на момент просмотра. Программа - обычный hello world.)
В чём причина этого, можно ли заставить gdb отображать значения локальных переменных в команде print?
gdb 7.1, gcc 4.4.3.
Нагуглил совет компилировать без оптимизации (с ключом -O0) - не помогло, всё то же самое.

evgen5555

Как программа собиралась?
Лучше флаги полностью выписывать в первом посте

ppplva

Любые переменные? Сомневаюсь. Давай сразу пример программы и опции компиляции.
Пробовал -g3?

Volshebnaya

<пожимает плечами>
#include <stdio.h>

int main
{
int i=5;
printf ("Test\n);
getchar;
return 0;
}

Переменную i пытаюсь просмотреть сразу после вывода printf, переключаясь в gdb через ctrl+c при остановке программы на getchar.
Если остановиться на этой же строке с помощью break, то i отображается нормально. x_x
Ключ -g3 не помогает.
Компилирую командой gcc -g -O0 hw.c -o hw

Helga87

У меня твой код работает.


krasin-boo:~$ cat hw.c
#include <stdio.h>

int main
{
int i=5;
printf ("Test\n");
getchar;
return 0;
}
krasin-boo:~$ gcc -g -O0 hw.c -o hw
krasin-boo:~$ gdb hw
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
Type "show copying" and "show warranty" for licensing/warranty details.
This GDB was configured as "x86_64-linux".

Reading symbols from /home/krasin/hw...done.
(gdb) start
Temporary breakpoint 1 at 0x40056c: file hw.c, line 5.
Starting program: /home/krasin/hw

Temporary breakpoint 1, main at hw.c:5
5 int i=5;
(gdb) step
6 printf ("Test\n");
(gdb) p i
$1 = 5

Helga87

или ты имеешь ввиду это:


(gdb) c
Continuing.
Test
^C
Program received signal SIGINT, Interrupt.
0x00007ffff7b324a0 in read from /lib/libc.so.6
(gdb) p i
No symbol "i" in current context.

Volshebnaya

Да, это

Helga87

если да, то тебе надо сначала подняться по стеку до main:
(gdb) up
0x00007ffff7acd348 in _IO_file_underflow from /lib/libc.so.6
(gdb) up
0x00007ffff7aceeee in _IO_default_uflow from /lib/libc.so.6
(gdb) up
0x00007ffff7ac5dcc in getchar from /lib/libc.so.6
(gdb) up
0x0000000000400582 in main at hw.c:7
7 getchar;
(gdb) p i
$2 = 5

В help stack есть всякие подробности по этому поводу

evgen5555

Переменную i пытаюсь просмотреть сразу после вывода printf, выходя в gdb через ctrl+c при остановке программы на getchar.
Если остановиться на этой же строке с помощью break, то i отображается нормально. x_x
bt сделай в обоих случаях

Volshebnaya

спасибо)
Оставить комментарий
Имя или ник:
Комментарий: