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

Dom*_*tal 25 .net c# 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**
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

Lee*_*Lee 61

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

如果没有,您可以配置JIT编译器以禁用优化并生成跟踪信息 - 请参阅此处有关如何设置配置的信息.这应该允许您在将调试器附加到进程时查看局部变量.

  • 我将Configuration Manager从Release更改为Debug,现在可以正常工作了 (11认同)
  • 谢谢.视觉工作室似乎很愚蠢,以优化具有突破点的代码.很明显我想用它:D (2认同)

小智 20

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

确保你没有这个:

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

  • @RadimKöhler,你错了.他放在这里的答案节省了我的一天,我很疯狂地解决了这个问题,并解决了这个问题.我在我的代码中添加了一个if(false)以避免长时间运行的块并测试另一个点,我的错误与ishayle描述的相同 (10认同)
  • @DiegoMendes如果这对你有帮助,那么**我错了!**很高兴看到...... (6认同)

小智 8

如果您尝试在发布版本(发布模式而不是调试模式)中进行调试,则会出现此错误.将您的解决方案配置更改为Debug(任何CPU),您将能够在即时窗口中看到变量值.