为什么F#调试器在说谎?

问题描述:

任何人都可以解释为什么VS2012的调试器对同一个对象成员显示不同的值吗? (见图)为什么F#调试器在说谎?

http://s2.uploads.ru/jlkw0.png(对不起,VS的nonEnglish接口,但我认为情况是清楚的。)

下面的代码:

http://pastie.org/7186239

调试经验似乎做识别标识符正确绑定的工作很差。在你的例子中,这意味着任何标识符Source确实显示的值是this.Source,而不是正确对象的相应属性。请注意,您可以通过悬停在y之上并扩大成员来获得正确的价值(尽管这显然不是一个好的体验)。

还有更令人困惑的方式,这个问题表现:

type T() = 
    member val P = 1 

    member this.DoSomething() = 
     let P = "test"  // set breakpoint here, hover over P 
     printfn "%i" this.P // set breakpoint here, hover over P 

T().DoSomething() 

现在,你将鼠标悬停在两者的P情况下,你会得到错误的东西!

+0

那么,这是否意味着Studio是一个有点儿车?或者这只是我应该记住的一个技巧? – Vladimir

+4

我肯定会说它是一个错误,是的。 – kvb