Я сталкиваюсь с самым странным поведением в VS 2012 (я пишу в cpp).
Я нажимаю «добавить часы» на переменную, и она говорит «идентификатор не определен».
Вот пример кода:
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 не определено даже внутри цикла.
Спасибо!
Как сказал Иоахим: curValue определяется внутри цикла. Если окно просмотра в Visual Studio видит его как неопределенное значение, то вам следует отключить оптимизацию компилятора.
По умолчанию при оптимизации компилятора / O2 оптимизируется по скорости. Чтобы выключить это:
У меня были включены оптимизации. Это испортило мою отладку.
Без printf первый цикл не имеет побочных эффектов и, таким образом, вероятно, оптимизируется в оптимизированной сборке. Во втором примере цикл, который инициализирует малый массив до 0, вероятно, заменяется секцией инициализированных данных.
Возможно, вам следует попытаться отладить неоптимизированную сборку.
Также обратите внимание, что отладчик Visual Studio имеет довольно хорошие визуализаторы для стандартных контейнеров. Так что, если весь смысл первого цикла был просто посмотреть на содержимое desc1
Вы можете просто проверить это прямо в отладчике.
Помните, что переменная curValue
допустимо только внутри цикла, если вы пытаетесь добавить его в часы, когда вы не в цикле, то переменная не определена.
Так как curValue
выходит за рамки видимости for
петля.
Также обратите внимание, что вы должны использовать %c
в printf
печатать char
, %s
используется для строк в стиле C
printf("%c\n",curValue);
переменная curValue
допустимо только внутри цикла. Если вы попытаетесь добавить его в «watch», когда вы не в цикле, тогда ваша переменная не будет определена.
Примечание: лучше распечатать это:
printf("%c\n",curValue);
Вместо этого:
printf("%s\n",curValue)
Перезапустите Visual Studio. Работал на меня.