【问题标题】:Conditional breakpoint modifier to see if array has changed条件断点修饰符以查看数组是否已更改
【发布时间】:2012-11-06 07:31:44
【问题描述】:

我在 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 不会修改 var 的值,因此断点永远不会命中。
  • str 永远不会改变,只有它的内容会改变。

标签: c++ debugging breakpoints


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 2012-11-06
    • 2011-08-09
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多