【发布时间】:2016-03-12 15:47:30
【问题描述】:
我目前正在尝试学习 F#,但在使用 Visual Studio 2015 调试器时遇到了一些问题。以下面的代码为例(我在玩 ASP.NET Web API):
[<Route("api/HomeApi/VideoCapture")>]
[<System.Web.Http.HttpGet>]
member this.VideoCapture() : HttpResponseMessage =
let response = this.Request.CreateResponse()
this.SetupCameraConsumers()
this.SetupCapture()
response.Content <- new PushStreamContent(this.Test())
response
我在这个方法的第一行放了一个断点,越过'let'可以正常工作,但是当我尝试越过下一行时,VS调试器基本上会继续到方法的末尾而不会抛出任何错误.在this.SetupCameraConsumers() 调用中,我只是将一些对象添加到列表中并返回一个“单位”。
以前有没有人遇到过这样的事情?如果我可以提供更多信息,请告诉我 - 我已将 VS 调试器用于 C# 代码,但从未遇到过这样的情况。
我是否正确调用了方法?这在 F# 中是否允许?
谢谢!
【问题讨论】:
-
函数式语言的调试与过程式语言的调试不同。在过程语言中,变量被赋值,在函数式编程中,项目被绑定。这不是错误或不寻常的。老实说,当您精通函数式编程时,您将不需要使用调试器。严重地。我只需要在有状态的情况下使用调试器,并且经常几个月不使用带有函数式编程的调试器。
-
感谢您的快速回复 :) 我很感激您不能提供函数式编程速成课程,但发生这种情况是因为在最初的“让”绑定之后,我不再分配任何值在这之后?很抱歉,如果这很明显。
-
我不会说这很明显,或者它与 F# 作为一种函数式语言有任何关系。 我希望能够单步执行此代码。 VS 调试器在单步执行 F# 代码时确实表现出一些特殊的行为,但这主要与部分代码被优化掉或在生成的 IL 代码无法完全匹配回原始 F# 代码。不过,这看起来不像这样。
-
代码本身看起来没问题。如果它有效,我就不会详述为什么调试器在那里表现得很奇怪。
-
我还让调试器在单步执行代码时意外跳过了行。我发现在函数或其他关键点中放置断点很有帮助。
标签: asp.net visual-studio f# visual-studio-2015 f#-3.0