我在 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
,那为什么没有命中断点呢?
我在这里想念什么?