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
那么它就会如您所愿。
我怀疑你的调用堆栈问题是因为你期望 main
在 f1
的初始化程序之前被调用,这是不正确的。
看来 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
那么它就会如您所愿。
我怀疑你的调用堆栈问题是因为你期望 main
在 f1
的初始化程序之前被调用,这是不正确的。