C++ eclipsec++;调试器不显示变量值

C++ eclipsec++;调试器不显示变量值,c++,eclipse,debugging,gdb,eclipse-cdt,C++,Eclipse,Debugging,Gdb,Eclipse Cdt,我使用Eclipse进行Java编码没有任何问题。用C++ Eclipse(靛蓝),我的问题是,当我把鼠标放在上面时,我不能看到这些变量的值< /强>!它只是显示变量的定义 在Java中,如果我们右键单击一个变量,就会得到一个选项,如“Inspect value”。该选项在C++ Eclipse中也不可见。 如何解决这个问题?我是否缺少任何插件或配置 在虚拟机(WindowsXP主机)中新安装了Ubuntu11.10。然后安装了g++4.6、EclipseIndigo和EclipseCDT。在“

我使用Eclipse进行Java编码没有任何问题。用C++ Eclipse(靛蓝),我的问题是,当我把鼠标放在上面时,我不能看到这些变量的值< /强>!它只是显示变量的定义

在Java中,如果我们右键单击一个变量,就会得到一个选项,如
“Inspect value”
。该选项在C++ Eclipse中也不可见。 如何解决这个问题?我是否缺少任何插件或配置

在虚拟机(WindowsXP主机)中新安装了Ubuntu11.10。然后安装了g++4.6、EclipseIndigo和EclipseCDT。在“调试配置”中,它显示:

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

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

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

int foo(void)
{
    int i=SomeFunctions();
    if(i>3) Foo();
    else
    {
       Bar();
       Baz();
    }
    // breakpoint here
    return 8;
}
编译器可以将
i
完全保存在寄存器中。当您到达断点时,该寄存器可能已被重新用于其他目的。调试器不可能在此时告诉您
i
的值

一般来说,除非程序的执行取决于变量的值,否则不要求可以确定该变量的值


关闭优化可能会有所帮助。

编译器可能正在对其进行优化。确保变量永远不会被优化的一个快速技巧是将其声明为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;
}

如果是这种情况,那么,即使我在
处放置断点,如果(I>3)
(在您的代码中),它仍然不起作用!我不会有一个值,因为编译器可能已经足够聪明,可以只使用一个寄存器作为值,而不将其映射到RAM中的任何变量。您是否在启用调试的情况下编译?(gcc选项-g)@Offirmo,我还没有检查。但是eclipse不应该自动执行吗?如果没有,那么在哪里设置这个选项呢?我刚刚在eclipse中尝试了一个默认的“hello world”项目,事实上调试选项在默认情况下是激活的。通过打开控制台窗口进行检查,执行“构建>清理”,然后执行“构建项目”,并检查a-g选项(或-g3)。这样我们就可以确定了。设置在“项目->构建配置->设置活动->调试”中