如何防止C#编译器/ CLR在DEBUG构建中优化掉未使用的变量?

时间:2011-10-20 06:30:48

标签: c# debugging

在调试时我试图将计算的中间结果保存到变量中,以便在满足断点条件时我可以检查该值。但是,C#编译器(或CLR)将该变量优化为未使用。我通过使变量成为类的公共字段来解决问题,但是我想知道是否有一个直接的解决方案来解决这个问题。

取消选中“优化代码”复选框。构建配置是Debug。

编辑:发现它只影响迭代器中一些未使用的变量,这些变量通常最终会作为自动生成的迭代器类中的字段;保留在不包含yield语句的块范围内的未使用变量。

4 个答案:

答案 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)

在我的情况下,“优化代码”选项未经检查,我仍然面临着这个问题。我检查了它,构建项目然后取消选中它并重新启动项目。对我来说这是一个固定的问题。