我正在使用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
更改时点击。为此,我设置了一个位置断点,然后在右键单击并在条件文本框中选择“条件”,我将str,20。最后,我选择“已更改”单选按钮。
现在我所看到的是:
每次都会在str[i]-=32
行上点击断点,但从不在printf("%s\n", str)
行,我很好奇为什么。显然,由于printf
语句之前的行,数组已经改变了,为什么断点不会被击中?
我在这里缺少什么?
答案 0 :(得分:1)
只有在写入内存而不是读取内存时才会中断。函数printf只读取该内存。