2014-09-12 2 views
1

При отладке с Eclipse и gcc, если я выбираю кадр в стеке, отличный от самого глубокого, происходит следующее. В Expressions я могу ввести любую локальную переменную и получить значение.Рассмотрение локальных переменных в стеке

Однако, используя Console окно, чтобы поговорить с gcc, я получаю следующее

p coeff_table 
No symbol "coeff_table" in current context. 

Как сказать gcc ссылаться на эту локальную переменную?

+1

И 'coeff_table' является локальной переменной в текущем кадре стека? –

+0

@JoachimPileborg, 'coeff_table' - это локальная переменная в кадре стека, которая не самая глубокая, но я нажал на нее в окне« Отладка »(то есть в окне стека вызовов). – Vorac

ответ

3

Вам нужно будет выбрать фрейм стека, содержащий локальную переменную coeff_table.

Типичная команда для изменения кадра - команда frame/f. Распечатайте обратную трассировку (bt), чтобы получить номер кадра, а затем выберите этот кадр. Когда вы выбрали правильный фрейм, вы сможете распечатать значение локальной переменной coeff_table.

Чтобы использовать GDB sample session в качестве примера, предположим, что трассировку является:

 
(gdb) bt 
#0 set_quotes (lq=0x34c78 "", rq=0x34c88 "") 
    at input.c:530 
#1 0x6344 in m4_changequote (argc=3, argv=0x33c70) 
    at builtin.c:882 
#2 0x8174 in expand_macro (sym=0x33320) at macro.c:242 
#3 0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30) 
    at macro.c:71 
#4 0x79dc in expand_input() at macro.c:40 
#5 0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195 

И предположим, что переменная coeff_table является локальной переменной функции expand_token. Вам нужно будет выбрать кадр # 3:

 
(gdb) f 3 

См 8.4 Selecting a Frame

+0

Спасибо, это здорово. – Vorac

+0

Или вы можете сделать «bt full», если вы предпочитаете перечислить местные жители во всех кадрах. – dbrank0

Смежные вопросы