В этом контексте значение x
скомпилировано как статическое поле модуля main
(представлен как класс).
Я думаю, вы должны всегда быть в состоянии увидеть в окне часов, если вы вводите Foo.main.x
(где Foo
это пространство имен файла - если вы не предоставите имена в явном виде, это будет генерироваться из имени файла таких как foo.fs
в этом случае).
Почему вы видите переменную, если добавить ignore
? Я не совсем уверен - возможно, потому, что компилятор F # устанавливает точку останова в какое-то место в том же классе, где размещается x
(как поле). Поиск, выполняемый отладчиком, следует правилам C# (.NET), поэтому он смотрит на скомпилированный код, а не на исходный код F # (поскольку интеграция F # не предоставляет свой собственный резольвер).
В общем, вы можете предположить, что локальные переменные можно просмотреть, если вы находитесь внутри функции, где они объявлены. Захваченные переменные в закрытии могут быть обычно доступны с использованием this
(что дает ссылку на объект замыкания), но это может зависеть от некоторых внутренних компонентов компилятора.
(Я думаю, что краткий комментарий состоит в том, что у нас все еще есть много мелких ошибок в отношении того, что появляется в окне локаторов отладчика, когда.) – Brian
@Brian. Существуют ли какие-либо планы по реализации поддержки F # -специфического отладчика? Я предполагаю, что мало что можно сделать, если F # полагается на поведение по умолчанию C# (хотя я не нахожу это на практике) –
У нас нет планов по внедрению нашей собственной ЭЭ, но есть еще тонны мы может сделать, чтобы улучшить опыт отладки без EE (например, грубые грани с локальными окнами, интервалы точек останова, асинхронная отладка, ...), если мы найдем время. – Brian