2017-01-08 10 views
3

Это выглядит, что F # отладчик не работает должным образом в VS 2015. Позвольте мне проиллюстрировать это на простой консольной программе:Проблемы с F # стеком вызовов в Visual Studio

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

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

я установил контрольные точки на линии // 1 и// 2 и запустите отладчик.

Первое попадание BP - это // 1, в то время как оно должно быть // 2. Почему это?

Также в данный момент я не могу перейти на самый верхний уровень вызова. То есть когда я дважды нажимаю на запись вызова, которая должна перейти к строке // 2 VS говорит мне, что «Источник недоступен». Почему это?

Эти две проблемы не мешают мне отлаживать, но тем не менее делают довольно несчастным.

+2

'f1' - это значение, а не функция. –

+2

Смотрите это: http://stackoverflow.com/q/17870937/180286 –

+1

Ах, это было глупо! Спасибо вам, ребята. – alehro

ответ

6

Первое попадание БП является // 1, в то время как оно должно быть // 2. Почему это?

f1 не является функцией, это значение единицы измерения типа. Поэтому его значение будет построено до того, как будет вызван main. Вы заметите, что если вы вызываете f1 несколько раз, он печатает только один раз, потому что значение было инициализировано. Если изменить f1 к этому:

let f1() = //etc 

Тогда он будет вести себя, как вы ожидаете.

Я подозреваю, что ваш вызовный вопрос вызван тем, что вы ожидаете, что main будет вызван перед инициализатором f1, что неверно.