Eclipse C ++调试器不显示变量值

时间:2011-11-07 05:32:24

标签: c++ eclipse debugging gdb eclipse-cdt

我使用Eclipse进行Java编码没有任何问题。使用C ++ Eclipse(Indigo),我的问题是,当我把鼠标放在它们上面时,我无法看到变量的值!它只显示变量的定义。

在Java中,如果我们右键单击变量,那么我们会得到像"Inspect value"这样的选项。在C ++ eclipse中也看不到该选项。 如何解决这个问题?我缺少任何插件或配置吗?

在Virtual Box(Windows XP Host)中新安装了Ubuntu 11.10。然后安装了g ++ 4.6,Eclipse Indigo和Eclipse CDT。在"Debug Configurations"中,它显示:

Debugger: gdb/mi
Advanced: Automatically track values of "Variables" and "Registers"
GDB Debugger: gdb
GDB command file: .gdbinit
GDB Command set: Standard(Linux)
Protocol: mi
(unchecked) Verbose console mode
(unchecked) Use full file path to set breakpoints

我可以放置断点并停止执行,唯一的问题是看到值。

2 个答案:

答案 0 :(得分:1)

最有可能的是,由于优化,这些值在那时不存在。例如,考虑:

int foo(void)
{
    int i=SomeFunctions();
    if(i>3) Foo();
    else
    {
       Bar();
       Baz();
    }
    // breakpoint here
    return 8;
}

编译器可以将i完全保留在寄存器中。到达断点时,该寄存器可能已被重新用于其他目的。调试器无法在此时告诉您i的值。

作为一般规则,除非程序的执行取决于变量的值,否则不要求可以确定变量的值。

关闭优化可能有所帮助。

答案 1 :(得分:1)

编译器似乎可能正在优化它。确保变量永远不会被优化的快速技巧是将其声明为 volatile 。这告诉编译器应该将变量视为可以在任何时更改(例如从中断修改全局)。

示例:

int main()
{
   // Even though we never read the value of test, it will not be optimized away
   volatile int test;

   test = foo();

   return 0;
}