在调试时我试图将计算的中间结果保存到变量中,以便在满足断点条件时我可以检查该值。但是,C#编译器(或CLR)将该变量优化为未使用。我通过使变量成为类的公共字段来解决问题,但是我想知道是否有一个直接的解决方案来解决这个问题。
取消选中“优化代码”复选框。构建配置是Debug。
编辑:发现它只影响迭代器中一些未使用的变量,这些变量通常最终会作为自动生成的迭代器类中的字段;保留在不包含yield语句的块范围内的未使用变量。
答案 0 :(得分:6)
lazy选项将是.... 使用值,理想情况是以不允许它保存在堆栈上的方式。例如:
var tmp = SomeMethod();
// your other code
Debug.WriteLine(tmp);
使用值作为参数意味着必须保留它,但该行自动不会编译为发布版本。
然而!我必须强调,本地人总是保留在未经优化/调试的版本中,所以我从难以设想的问题中找到了这个场景。
答案 1 :(得分:2)
如果您使用的是Visual Studio,为什么不在生成计算的行后面的行上添加断点,然后您可以将鼠标悬停在计算上以在intellisense / tooltip弹出窗口中查看结果?我还认为你可以将计算添加到“监视”屏幕并以这种方式查看结果。
这通常是我查看调试内容的结果。或者,您可以以一种简单的方式使用您创建的临时变量,以避免收到警告。
例如:
Console.Write(tempVariable);
答案 2 :(得分:1)
您需要在Debug build的项目选项中取消选中“优化代码”选项。
答案 3 :(得分:1)
在我的情况下,“优化代码”选项未经检查,我仍然面临着这个问题。我检查了它,构建项目然后取消选中它并重新启动项目。对我来说这是一个固定的问题。