Добавить показы часов undefined идентификатор visual studio 2012, cpp - программирование
Подтвердить что ты не робот

Добавить показы часов 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 даже внутри цикла.

Спасибо!

4b9b3361

Ответ 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. Работал на меня.