c++ - 条件断点修饰符查看数组是否已更改

标签 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 语句之前的行而改变了,那么为什么没有命中断点呢?

我在这里错过了什么?

最佳答案

只有当内存被写入而不是被读取时,你才会崩溃。函数 printf 仅读取该内存。

关于c++ - 条件断点修饰符查看数组是否已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13241858/

相关文章:

debugging - 无法运行 fortran 调试器。 Visual Studio Code

php - 程序无法启动,因为缺少 php5.dll

java - onActivityResult 有效!但我无法调试

c++ - 英特尔 PIN :Initial Set up of Intel PIN tool

java - 你能一次在一个对象上调用多个方法吗?

无法在 if 语句之外访问 c++ 结构

unit-testing - Visual Studio 调试器复制对象

java - JUnit 不会在 Eclipse 中的断点处停止(使用 JDK 1.6.0.20)

c# - 在 VS2010 中放置断点是否会影响程序的运行时行为?

c++ - 从文件中读取对象