рекурсивная функция и точка останова с использованием F # - PullRequest
1 голос
/ 03 октября 2011

Рассмотрим следующий код:

[<EntryPoint>]
let main (args: string []) = 

  let rec main time =
    let newTime = time + 2 // place a breakpoint at this line
    main newTime

  main 0

Я не могу поставить точку останова на отмеченной линии.Я часто сталкиваюсь с такими проблемами при использовании рекурсивных функций, и это действительно заставляет меня не использовать их.Есть ли какое-нибудь простое решение для этого?

РЕДАКТИРОВАТЬ: я создаю новое решение, и моя команда сборки выглядит следующим образом:

'------ Сборка запущена: Проект:ConsoleApplication4, Конфигурация: отладка x86 ------ C: \ Program Files (x86) \ Microsoft F # \ v4.0 \ fsc.exe -o: obj \ x86 \ Debug \ ConsoleApplication4.exe -g --debug: full--noframework --define: DEBUG --define: TRACE --doc: bin \ Debug \ ConsoleApplication4.XML --optimize- --tailcalls- --platform: x86 -r: "C: \ Program Files (x86) \Ссылочные сборки \ Microsoft \ FSharp \ 2.0 \ Runtime \ v4.0 \ FSharp.Core.dll "-r:" C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client\ mscorlib.dll "-r:" C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Core.dll "-r:" C: \ Program Files(x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.dll "-r:" C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0\ Профиль \ Client \System.Numerics.dll "--target: exe --warn: 3 --warnaserror: 76 --vserrors --LCID: 1033 --utf8output --fullpaths --flaterrors" C: \ Users \ olsv \ AppData \ Local \Temp.NETFramework, Version = v4.0, Profile = Client.AssemblyAttributes.fs "Program.fs ConsoleApplication4 -> d: \ olsv \ Documents \ visual studio 2010 \ Проекты \ ConsoleApplication4 \ ConsoleApplication4 \ bin \ Debug \ ConsoleApplication4.exe ========== Построение: 1 выполнено или обновлено, 0 не выполнено, 0 пропущено ========== '

Ответы [ 2 ]

4 голосов
/ 03 октября 2011

Я попытался отладить код, который вы опубликовали, и он, кажется, работает нормально (я использую Visual Studio 2010 SP1). Когда я размещаю точку останова и запускаю код (как консольное приложение), он останавливается на точке останова несколько раз, и я могу перейти к следующему выражению и посмотреть состояние локальных переменных.

Вы можете попробовать проверить флаги компилятора - отладка работает лучше всего, когда вы отключаете оптимизацию и хвостовые вызовы (это может быть особенно актуально для рекурсивных функций). Когда я собираю проект, флаги включают следующее: --debug:full --optimize- --tailcalls-.

enter image description here

0 голосов
/ 25 октября 2011

Похоже, что это ошибка.Я уже сообщил об этом команде F #.Так что будем надеяться, что они скоро это исправят!

...