2014-09-12 56 views
1

当使用Eclipsegcc进行调试时,如果我在堆栈中选择一个帧,那么最深的帧将发生以下情况。在Expressions中,我可以输入任何局部变量并获取该值。检查堆栈上的局部变量

但是,使用Console窗口交谈gcc,我得到以下

p coeff_table 
No symbol "coeff_table" in current context. 

我如何告诉gcc引用该局部变量?

+1

和'coeff_table'是一个局部变量在当前堆栈帧? – 2014-09-12 12:53:16

+0

@JoachimPileborg,'coeff_table'是一个堆栈框架中的局部变量,并不是最深的,但我在“Debug”窗口(即调用堆栈窗口)中点击了它。 – Vorac 2014-09-15 07:33:13

回答

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 2014-09-15 08:32:38

+0

或者,如果您希望在所有框架中列出当地人,您可以执行“bt full”。 – dbrank0 2014-09-16 08:48:03