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

svmlkihl  于 2023-01-18  发布在  .NET
关注(0)|答案(5)|浏览(220)

我插入了两个临时变量,想看看它们的值,但是我不能。我可以把它放在别的地方来解决这个问题,但是我很感兴趣为什么会有这种行为。

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显示我的值。只有结果将显示在局部窗口,没有所谓的弧度或度变量。
例如,如果我为Radian变量添加一个监视,我会收到带有红十字图标的消息:
Radian -名称“Radian”在当前上下文中不存在

2uluyalo

2uluyalo1#

局部变量可能已被JIT编译器优化掉。由于您使用的是Visual Studio,因此可以将配置切换到“调试并重新生成”。
如果没有,您可以配置JIT编译器禁用优化并生成跟踪信息-参见here on how to set the configuration。这应该允许您在将调试器附加到进程时查看局部变量。

ssm49v7z

ssm49v7z2#

我在VS2012中遇到过另一个场景,它会导致变量在调试模式下“消失”:
确保你没有这个

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

fxnxkyjh3#

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

bt1cpqcv

bt1cpqcv4#

我有一个.NET标准项目,对我有效的方法是:

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

它已经被设置为“可移植”。将它改为“完整”可以让我再次看到监视和即时窗口中的变量。
不确定是否相关,但我最近将项目从PCL转换为.NET标准。可能有些东西在翻译中丢失了。

wgeznvg7

wgeznvg75#

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

相关问题