F#断点只有在抛出异常后才起作用。

3
我尝试使用 F#、.Net-Core 3、Ionide 和 Visual Studio Code 创建 ASP.Net 网站,但是当我尝试在 F# 文件中设置断点时,它并没有被触发。如果我在 C# 文件中设置断点,则可以正常被触发。
assert false

在我的断点前,我遇到了异常,之后才触发了断点。

我也曾在 Visual Studio 中尝试过相同的操作,断言成功中断,但当继续运行时,它不会触发断点,即使 VS Code 可以。

在 VS Code 中,这种操作不起作用:

let x = 4 // <- Breakpoint

但这个确实做到了:
assert false
let x = 4 // <- Breakpoint

无论我是否添加assert,启动时都会收到这个警告。
Breakpoint warning: No executable code of the debugger’s target code type is associated with this line.
Possible causes include: conditional compilation, compiler optimizations, or the target architecture of this line is not supported by the current debugger code type.

可能的原因是什么,我该如何解决?

这很可能是编译器优化了你的代码行。像这样非常简单的绑定,很有可能会被优化掉。你尝试过不使用优化进行编译吗? - Fyodor Soikin
@FyodorSoikin 我已经在调试模式下编译了,输出文件生成在 Debug 文件夹中,我的 tasks.json 文件如下: "command": "dotnet build -c Debug", 正如我所说的,它可以使用 assert。 但还是谢谢。 - Redline
1个回答

1
最终,问题出在我所涉及的项目之间复杂的依赖关系上。
  1. ASP.Net 项目 (F#)
  2. 迁移和 DbContext 项目 (C#)
  3. 单元测试项目 (F#)
  4. DbContext ASP.Net 共享对象项目 (F#)
我通过保留迁移项目但将 DbContext 移动到 ASP.Net 项目中解决了这个问题。因此,不再是从迁移到 ASP.Net 的引用,而是相反的方式。这也使我能够将共享对象移到 ASP.Net 项目中并删除共享对象项目。此后,它看起来像这样:
  1. ASP.Net 和 DbContext 项目 (F#)
  2. 迁移项目 (C#)
  3. 单元测试项目 (F#)
虽然我并没有为了解决这个问题而这么做,但它作为一个副作用解决了问题。我希望当其他人遇到同样或类似的问题时,这篇文章对他们有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接