条件断点修饰符,用于查看数组是否已更改

时间:2012-11-05 23:07:48

标签: c++ debugging breakpoints

我正在使用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语句之前的行,数组已经改变了,为什么断点不会被击中?

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

只有在写入内存而不是读取内存时才会中断。函数printf只读取该内存。