检查堆栈中的局部变量

时间:2014-09-12 12:51:08

标签: c++ eclipse gdb

使用Eclipsegcc进行调试时,如果我在堆栈中选择一个不同于最深层的帧,则会发生以下情况。在Expressions中,我可以键入任何局部变量,然后得到值。

但是,使用Console窗口与gcc对话,我会得到以下内容

p coeff_table
No symbol "coeff_table" in current context.

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

1 个答案:

答案 0 :(得分: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