Добавить показы часов undefined идентификатор visual studio 2012, cpp
Я встречаю самое странное поведение в VS 2012 (я пишу в cpp).
Я нажимаю "добавить часы" на переменную, и он говорит "идентификатор undefined".
Вот пример кода:
for (int j=0;j<32;j++)
{
unsigned char curValue=desc1.at<unsigned char>(0,j);
printf("%s\n",curValue);
}
Мне пришлось использовать printf для отображения значения curValue. лол.
Кто-нибудь сталкивался с таким поведением?
Изменить: более странно это происходит. При отладке следующего кода:
int b1[8];
for (int k=0;k<7;k++)
b1[k]=0;
char q=curValue;
int t=0;
while (q!=0){
b1[t++]=q%2;
q=q/2;
}
Отладчик просто пропускает цикл с помощью b1 [k] = 0;
Обратите внимание, что curValue равно undefined даже внутри цикла.
Спасибо!
Ответы
Ответ 1
Как сказал Йоахим: curValue определяется внутри цикла. Если окно просмотра в визуальной студии видит это как значение undefined, тогда вы должны отключить оптимизацию компилятора.
Оптимизация оптимизатора компилятора оптимизирована для скорости. Чтобы отключить его:
- Перейдите в проект, щелкните правой кнопкой мыши и выберите свойства
- Свойства конфигурации- > C/С++ → Оптимизация
- выберите оптимизацию и измените ее с максимальной скорости (/O2) на Disabled (/Od)
![enter image description here]()
Ответ 2
У меня была оптимизация. Это испортило мою отладку.
Ответ 3
Без printf первый цикл не имеет побочных эффектов и, вероятно, оптимизирован в оптимизированной сборке. Во втором примере цикл, который инициализирует малый массив до 0, вероятно, заменяется инициализированным разделом данных.
Вероятно, вы должны попробовать отладить с помощью unoptimized build.
Также обратите внимание, что отладчик Visual Studio имеет неплохие визуализаторы для стандартных контейнеров. Поэтому, если вся точка первого цикла была просто заглянуть в содержимое desc1
, вы, вероятно, можете просто изучить его непосредственно в отладчике.
Ответ 4
Помните, что переменная curValue
действительна только внутри цикла, если вы попытаетесь добавить ее к часам, когда вы не находитесь в цикле, тогда переменная не определена.
Ответ 5
Потому что curValue
выходит за пределы вне цикла for
.
Также обратите внимание, что вы должны использовать %c
в printf
для печати char
. %s
используется для строк в стиле C.
printf("%c\n",curValue);
Ответ 6
Переменная curValue
действительна только внутри цикла. Если вы попытаетесь добавить его в "watch", когда вы не находитесь в цикле, ваша переменная не будет определена.
Примечание. Лучше вы должны напечатать это:
printf("%c\n",curValue);
Вместо этого:
printf("%s\n",curValue)
Ответ 7
Перезапустите Visual Studio. Работал на меня.