Visual Studio:让调试器意识到函数不会导致"副作用"

16 c# debugging visual-studio

我有一个对象,我必须通过观察窗口观看很多次的功能输出.问题是每次我都要按下刷新按钮,因为"这个表达会导致副作用,不会被评估".有没有办法用[DoesNotCauseSideEffects]之类的东西标记一个函数,这样每次我做一个步骤时手表都会自动评估它?

我在VS2008或2010中编写C#.

编辑: 该功能看起来像这样,并且正如您所看到的那样,不会产生任何副作用.(x,y,z都是双打)

public override string ToString()
{
    return "{ " + x.ToString(".00") + ", " + y.ToString(".00") + ", " + z.ToString(".00") + "}";
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*gas 21

您可以附加,ac到监视表达式以使其自动刷新值:

x.ToString(),ac
Run Code Online (Sandbox Code Playgroud)

有关更多信息和其他格式说明符,请参阅MSDN .


Jar*_*Par 3

不,这是不可能的。函数是否会有副作用的确定实际上是由语言特定的表达式评估器做出的。

C# 和 VB.Net 都有不同的 EE,并且各自对函数是否会产生副作用有自己的判断。但一般来说,它们都认为显式函数调用具有副作用,并且不会在调试器想要禁用副作用的情况下处理它们,例如单步执行。

解决这个问题的最简单方法是使用属性。默认情况下,属性实例不被认为有副作用,它们将按步骤进行评估。

编辑

想要澄清一些误解。调试器或表达式求值器都不会进行任何类型的方法检查来确定函数是否有副作用。他们只是注意到某个函数的存在并将其标记为可能具有副作用。他们不会尝试以任何方式检查该方法的代码。

  • 更有理由不使用 VB.NET ;-) (4认同)