Eclipse C ++ отладчик не отображает значения переменных - PullRequest
4 голосов
/ 07 ноября 2011

Я использовал Eclipse для Java-кодирования без каких-либо проблем. В C ++ Eclipse (Indigo) моя проблема заключается в том, что я не могу видеть значения переменных , когда на них наведена мышь! Это просто показывает определение переменной.

В Java, если щелкнуть правой кнопкой мыши переменную, мы получим параметр, подобный "Inspect value". Эта опция также не видна в C ++ Eclipse. Как решить эту проблему? Есть ли какой-нибудь плагин или конфигурация, которую я пропускаю?

У вас недавно установлена ​​Ubuntu 11.10 в Virtual Box (Windows XP Host). Затем установили 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 ]

1 голос
/ 16 ноября 2011

Возможно, компилятор оптимизирует его. Быстрый способ убедиться, что переменная никогда не будет оптимизирована, - объявить ее как 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;
}
1 голос
/ 07 ноября 2011

Скорее всего, из-за оптимизации эти значения не существуют на данный момент. Например, рассмотрим:

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

Компилятор может хранить i полностью в реестре. К тому времени, когда вы достигнете точки останова, этот регистр может быть повторно использован для каких-то других целей. Для отладчика может оказаться невозможным сообщить вам значение i в этой точке.

Как правило, если выполнение программы не зависит от значения переменной, нет требования, чтобы можно было определить значение этой переменной.

Отключение оптимизации может помочь.

...