【问题标题】:add watch shows undefined identifier visual studio 2012, cpp添加手表显示未定义标识符visual studio 2012,cpp
【发布时间】:2013-07-27 20:54:33
【问题描述】:

我在 VS 2012 中遇到了最奇怪的行为(我正在用 cpp 编写)。

我在一个变量上单击“添加监视”,它显示“标识符未定义”。

下面是代码示例:

for (int j=0;j<32;j++)
        {
            unsigned char curValue=desc1.at<unsigned char>(0,j);
            printf("%s\n",curValue);    
        }

我不得不使用 printf 来显示 curValue 的值。哈哈。

有没有人遇到过这样的行为?

编辑:更奇怪的是这种情况发生。调试以下代码时:

    int b1[8];

    for (int k=0;k<7;k++)
        b1[k]=0;

    char q=curValue; 
    int t=0;
    while (q!=0){
        b1[t++]=q%2;
        q=q/2;
    }

调试器只是跳过 b1[k]=0; 的循环

请注意,即使在循环内部,curValue 也是未定义的。

谢谢!

【问题讨论】:

  • 该问题的另一个解决方案是启用编译器的优化,但启用 /Zo(增强优化调试)告诉编译器生成与优化代码一起使用的附加调试信息。这仅适用于 Visual Studio 2013 更新 3 或更高版本。见msdn.microsoft.com/en-us/library/dn785163.aspx
  • 这个问题在 VS 的许多版本中已经存在了好几年。微软半途而废的 C++ 实现的另一个例子。 (你永远不会在 C# 中看到这样的废话。)

标签: c++ visual-studio watch


【解决方案1】:

请记住,变量curValue 仅在循环内有效,如果您在不在循环中时尝试将其添加到手表,则该变量未定义。

【讨论】:

  • 感谢您的回答,但即使在循环内也未定义。
  • @user2215359 你开启优化了吗?他们在调试时可能会搞砸。在这种情况下,如果循环不包含超过分配给curValue 的内容,则很可能会被优化掉。
  • 感谢您的回答。如何检查我是否开启了优化?
【解决方案2】:

因为curValue 超出了for 循环的范围。

还请注意,您应该在printf 中使用%c 来打印char%s 用于 C 风格的字符串。

printf("%c\n",curValue);

【讨论】:

    【解决方案3】:

    变量curValue 仅在循环内有效。如果您在不在循环中时尝试将其添加到“监视”中,那么您的变量将不会被定义。

    注意:最好把这个打印出来:

    printf("%c\n",curValue);
    

    而不是这个:

    printf("%s\n",curValue)
    

    【讨论】:

      【解决方案4】:

      我开启了优化。这搞砸了我的调试。

      【讨论】:

        【解决方案5】:

        没有 printf,第一个循环没有副作用,因此很可能在优化构建中被优化掉。在第二个示例中,将小数组初始化为 0 的循环可能会替换为已初始化的数据段。

        您可能应该尝试使用未优化的构建进行调试。

        另请注意,Visual Studio 调试器为标准容器提供了相当不错的可视化工具。因此,如果第一个循环的全部目的只是查看 desc1 的内容,您可能可以直接在调试器中检查它。

        【讨论】:

        • 感谢所有回答的人。
        【解决方案6】:

        正如 Joachim 所说:curValue 是在循环内定义的。如果 Visual Studio 中的监视窗口将其视为未定义值,则应关闭编译器优化。

        编译器优化默认为 /O2 优化速度。关闭它:

        • 进入项目,右键选择属性
        • 配置属性->C/C++->优化
        • 选择优化,并将其从最大化速度 (/O2) 更改为禁用 (/Od)

        【讨论】:

        • 另外请注意,这主要用于调试配置模式,不适用于应无错误和优化的版本。谢谢。
        • 在 vs 2019 中的优化已关闭,但变量仍未定义。
        【解决方案7】:

        重新启动 Visual Studio。为我工作。

        【讨论】:

          猜你喜欢
          • 2016-12-04
          • 2018-11-13
          • 2016-02-15
          • 1970-01-01
          • 1970-01-01
          • 2020-03-15
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多