Debugging experience does not seem to do well in determining the correct binding for identifiers. In your example, this means that any identifier named Source really shows the value of this.Source , and not the corresponding property of the correct object. Note that you can get the correct value by hovering over y and expanding the members (although this is obviously not a lot of experience).
There are even more confusing ways that this issue manifests itself:
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()
Now, depending on which instance of P you are pointing at yourself, you are mistaken!
source share