Я играл с модификатором точки останова изменения переменных в Visual Studio 2012. Насколько я понимаю, модификатор изменения переменной приводит к сбою отладчика, если указанное значение переменной изменяется от предыдущего выполнения расположения. Я думаю, что это было бы полезно для сужения памяти перезаписывает. Мой очень простой код C ++ такой:
int main ()
{
printf("This program converts upper case chars to lower and vice versa\n");
char str[20]="lowercase";;
int i;
for (i=0; i < strlen(str); i++)
{
if (str[i]>=97 && str[i]<=122)
{
str[i]-=32;
}
else
{
str[i]+=32;
}
}
str[1] = 'o';
printf("%s\n",str);
system("PAUSE");
}
Теперь я устанавливаю условную точку останова на две строки
str[i]=str[i]-32
printf("%s\n", str)
ударить, когда массив str
изменения. Для этого я устанавливаю точку останова местоположения, затем выбираю «условие» при щелчке правой кнопкой мыши и в текстовом поле условия помещаю стр. 20. Наконец я выбираю переключатель «изменилось».
Теперь я вижу вот что:
Точка останова срабатывает каждый раз на линии str[i]-=32
, но никогда не на линии printf("%s\n", str)
и мне любопытно, почему. Очевидно, что массив изменился из-за строки, предшествующей printf
Скажите, почему же не достигнута точка останова?
Что мне здесь не хватает?
Вы ломаетесь, только когда эта память написана, а не прочитана. Функция printf только читает эту память.
Других решений пока нет …