如何在F#interactive中使用断点?

时间:2010-09-06 21:26:17

标签: debugging f# breakpoints f#-interactive

我已经开始使用VS2010和F#interactive研究算法中的一些想法。

所以,我创建了一个DebugScript.fsx,我在那里写了一些代码并最终将它发送到F#Int进行测试。

在某些时刻,我需要抓住一个错误。但即使在简单的for循环中,我也无法设置断点:

for i in stringarray do
    printfn "%s" i

当我按F9设置断点时,VS会显示一个带有警告标志的红色圆圈。它的提示是“断点当前不会被击中”。

当然,我确实打开了Debug菜单 - >附加到流程...... - >以前的Fsi.exe

我尝试将Debugger.Break()放在循环中,但这是调试器停止的唯一行,这使我无法继续在循环内部调试行。我也没有任何局部变量:(

也许我错过了一些明显的东西?

5 个答案:

答案 0 :(得分:12)

您无法调试作为脚本一部分的代码,但您可以通过将调试器附加到Fsi.exe进程来调试脚本中引用的外部代码。 因此,如果您真的想从交互式窗口进行调试而不想编写控制台程序,则可以使用要调试的函数创建一个fs文件,并且:

  1. 附加调试器

  2. 无论

    • 使用#load(*)
    • 引用fs文件
    • 将代码编译为库,并使用#r
    • 引用生成的DLL
  3. 设置断点

  4. 从脚本
  5. 调用该函数

    (*)在我的VS Ultimate安装上工作,但我无法在VS Shell安装的另一台机器上重现

答案 1 :(得分:12)

VS2015中的

现在变得更加容易:在工具 - >选项 - > F#工具 - > F#interactive->调试 - >启用脚本调试= True

然后重置您的交互式会话,当您要调试时按CTRL + ALT + D. 并像往常一样发送命令

(或右键单击源文件并选择"在交互式&#34中调试;)

答案 2 :(得分:2)

据我所知,没有办法做到这一点。相反,您将需要使用.fs文件并在Visual Studio中开始调试它。

答案 3 :(得分:1)

除了kvb的回答:可以说F#Interactive已经是一种调试器了。您可以逐行(或逐个区域)提供代码并查看中间结果。您还可以通过在F#Interactive控制台中评估绑定值来检查绑定的值。

答案 4 :(得分:0)

交互式用于提供小块代码并评估中间结果,将其视为微单元测试。我使用带有f#的nunit取得了一些成功,它与c#没有什么不同,你以同样的方式装饰你的testfixture和测试用例,它会加载。我确实有一些混合模式程序集的问题,其中nunit会barf,但总的来说,这是一个更好的方式来测试一段代码。另外,我没有看到将命名空间发送到仅交互式模块的方法。