调试时,当前上下文中不存在变量

时间:2012-11-22 17:23:51

标签: c# .net debugging properties visual-studio-2012

我插入了两个临时变量并希望看到它们的值,但我不能。我可以把它放在其他地方解决它,但我很感兴趣为什么会出现这种行为。

   public float Value
    {
        get
        {
            float result = Memory.ReadFloat(Address);

            double Radian = Math.Round(result, 2); // **BREAK POINT HERE**
            double Degree = Math.Round(Math.Round((double)(result * 180 / Math.PI)), 2); // **BREAK POINT HERE**

            return result; // **BREAK POINT HERE**
        }
    }

我打破了所有这三点,但我无法通过Visual Studio 2012向我展示价值观。只有结果会出现在locals窗口中,没有名为Radian或Degree的变量。

例如,如果我为Radian变量添加一个监视器,我会收到带有红叉图标的消息:

  

Radian - 名称' Radian'在当前上下文中不存在

5 个答案:

答案 0 :(得分:59)

JIT编译器可能已经优化了局部变量。由于您使用的是Visual Studio,因此可以将配置切换到Debug并重建。

如果没有,您可以配置JIT编译器以禁用优化并生成跟踪信息 - 请参阅here on how to set the configuration。这应该允许您在将调试器附加到进程时查看局部变量。

答案 1 :(得分:20)

我在VS2012中遇到另一种情况,导致变量在调试模式下“消失”:

请确保您没有:

if(false)
   {
   .
   }
else
   {
   //Code here will be optimized and variables will not be available.
   }

答案 2 :(得分:7)

If you are trying to debug in a release build (release mode instead of debug mode), you'll get this error. Change your solution configuration to Debug (Any CPU) and you'll be able to see variable values in the immediate window.

答案 3 :(得分:0)

我将我的解决方案配置更改为调试(任何CPU),但这不是问题。升级到Visual Studio 2017后,我以为我在调试中,但还有一个更简单(但很重要)的步骤。 (这对大多数人来说可能是显而易见的,但我错过了。)在“解决方案配置”设置为“调试”的情况下,我必须单击“调试”旁边的向下箭头并选择“配置管理器...”,然后在相应的弹出窗口“配置”仍设置为“发布” - 我必须将其更改为“调试”并单击“关闭”按钮。从那里重新运行允许我在调试时查看所有变量。

答案 4 :(得分:0)

我有一个.NET Standard项目,对我有用的是:

  • 项目属性。
  • “构建”标签。
  • “高级”按钮(一直在右下角)。
  • 将“调试信息”选项更改为完整。
  • List item

已将其设置为“便携式”。将其更改为“完全”可使我再次在“监视”和“立即”窗口中查看变量。

不确定它是否相关,但是我最近将项目从PCL转换为.NET Standard。也许有些东西在翻译中迷失了。