27

I inserted two temp variables and want to see their values, but I can't. I could solve it by placing it somewhere else, but I'm interested why this behaviour exists.

   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**
        }
    }

I break on all three points, but I can't get Visual Studio 2012 to show me the values. Only result will show up on the locals window, there is no variable called Radian or Degree.

If I add a watch for Radian variable for example, I get this message with a red cross icon:

Radian - The name 'Radian' does not exist in the current context

4

5 回答 5

65

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

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

于 2012-11-22T21:08:38.550 回答
21

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

确保你没有这个:

if(false)
   {
   .
   }
else
   {
   //Code here will be optimized and variables will not be available.
   }
于 2014-01-22T07:28:53.547 回答
14

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

于 2016-10-20T20:05:41.017 回答
2

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

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

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

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

于 2019-09-11T16:47:44.220 回答
0

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

于 2018-03-06T20:23:33.750 回答