2017-01-08 64 views
3

它看起來是F#調試器不會在2015年VS正常工作,讓我說明它簡單的控制檯程序:在Visual Studio F#調用堆棧問題

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

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

我設置斷點上線// 1// 2並啓動調試器。

第一個被命中的BP是// 1,而它應該是// 2。這是爲什麼?

此時我無法導航到調用堆棧的最頂層。即當我雙擊應該引導我行的callstack條目時// 2 VS告訴我「源不可用」。這是爲什麼?

這兩個問題並沒有阻止我調試,但仍然讓人很不高興。

+2

'f1'是一個值,而不是函數。 –

+2

看到這個:http://stackoverflow.com/q/17870937/180286 –

+1

啊,那太蠢了!感謝你們。 – alehro

回答

6

第一個被命中的BP是// 1,而它應該是// 2。這是爲什麼?

f1不是函數,它是類型單位的值。所以它的價值將在調用main之前構建。您會注意到,如果您多次撥打f1,它只會打印一次,因爲該值已初始化。如果您將f1更改爲:

let f1() = //etc 

然後它的行爲如您所願。

我懷疑你的調用堆棧的問題是因爲你期待mainf1的初始值設定項之前被調用,這是不正確的。