Gdb: Нет символа "i" в текущем контексте
При отладке программы 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];
}
}
}
Спасибо
Ответы
Ответ 1
Вероятно, он оптимизирован из вашего скомпилированного кода, поскольку вы используете только feature_mask[i]
в цикле.
Вы указали уровень оптимизации при вызове своего компилятора? Если вы использовали gcc, просто опустите любые опции -O
и повторите попытку.
Ответ 2
Недавно я столкнулся с этой проблемой. Я скомпилировал GCC 5.1, а затем использовал его для компиляции кодовой базы С++ 11. И хотя я мог бы выполнить программный код в gdb, я не смог распечатать значение любой переменной, я продолжал получать ошибки "Нет символов" xyz "в текущем контексте" для каждой переменной.
Я использовал gdb 7.4, но последняя версия, доступная в то время, была 7.9. Я загрузил последнюю версию gdb и скомпилировал ее (используя GCC 5.1), а при использовании gdb 7.9 мне удалось успешно проверить значения переменных снова.
Я думаю, что отладочная информация GCC 5.1 несовместима с gdb 7.4.
Ответ 3
Убедитесь, что программа скомпилирована без оптимизации и с включенной информацией об отладке. Весьма вероятно, что счетчик циклов попадает в регистр.
Ответ 4
Вы можете попробовать объявить я как volatile
. Это предотвратит некоторые оптимизации компилятора (и, надеюсь, сделает i
видимым внутри отладчика).
Ответ 5
Проверьте параметры оптимизации. Возможно, GCC может заменить переменную указателем на feature_mask
.