GDB: нет символа «я» в текущем контексте - PullRequest
21 голосов
/ 21 сентября 2010

При отладке программы на C в gdb у меня есть точка останова в цикле for.Я не могу напечатать значение «i» (я получаю: нет символа «i» в текущем контексте.).Я могу напечатать значение всех других переменных.Это нормально?

Вот цикл:

for (i=0; i < datasize; i++){  
    if ( feature_mask[i] > 0 ){  
        k = feature_mask[i] - 1;  
        if (neighbors[k][nmax-1] != 0){
            neighbors[k][nmax-1] = bvalue;  
            feature_mask[i] = -feature_mask[i];
        }
    }
}

Ответы [ 5 ]

22 голосов
/ 31 июля 2015

Я недавно столкнулся с этой проблемой. Я скомпилировал GCC 5.1, а затем использовал его для компиляции кодовой базы C ++ 11. И хотя я мог просматривать код программы в gdb, я не мог напечатать значение любой переменной, я продолжал получать & ldquo; без символа "xyz" в текущем контексте & rdquo; ошибки, для каждой переменной.

Я использовал GDB 7.4, но последняя версия, доступная на тот момент, была 7.9. Я скачал последнюю версию GDB и скомпилировал ее (используя GCC 5.1), и при использовании GDB 7.9 я смог снова успешно проверить значения переменных.

Я полагаю, что отладочная информация GCC 5.1 несовместима с GDB 7.4.

21 голосов
/ 21 сентября 2010

Возможно, он был оптимизирован из вашего скомпилированного кода, поскольку вы используете feature_mask[i] только внутри цикла.

Определяли ли вы уровень оптимизации, когда вызывали свой компилятор?Если вы использовали gcc, просто пропустите все опции -O и попробуйте снова.

4 голосов
/ 21 сентября 2010

Убедитесь, что программа скомпилирована без оптимизации и с включенной отладочной информацией.Вполне вероятно, что счетчик цикла окажется в регистре.

3 голосов
/ 21 сентября 2010

Вы можете попробовать объявить меня как volatile. Это предотвратит некоторые оптимизации компилятора (и, надеюсь, сделает i видимым внутри отладчика).

2 голосов
/ 21 сентября 2010

Проверьте ваши варианты оптимизации.Возможно, что GCC может заменить переменную указателем на feature_mask.

...