Visual Studio 中的 F# 调用堆栈问题

Problems with F# callstack in Visual Studio

看来 F# 调试器在 VS 2015 中无法正常工作。让我在简单的控制台程序上进行说明:

let f1 =
    printf "hello 1" 
    printf "hello 2" //1

[<EntryPoint>]
let main argv = 
    f1 //2
    0

我在 //1 和 //2 行设置断点并启动调试器。

第一个被击中的 BP 是 //1 而它应该是 //2。这是为什么?

此时我也无法导航到调用堆栈的最顶层。 IE。当我双击应该导航到行//2 的调用堆栈条目时,VS 告诉我 "Source Not Available"。这是为什么?

这两个问题并没有阻止我调试,但仍然很不高兴。

First BP being hit is //1 while it should have been //2. Why is that?

f1 不是一个函数,它是一个单位类型的值。所以它的值将在 main 被调用之前构造。您会注意到,如果您多次调用 f1,它只会打印一次,因为该值已被初始化。如果将 f1 更改为:

let f1() = //etc

那么它就会如您所愿。

我怀疑你的调用堆栈问题是因为你期望 mainf1 的初始化程序之前被调用,这是不正确的。