盲源步进之谜,或 F# 如何在大型源文件上表现不稳定

The mystery of blind source stepping, or how F# behaves erratically on large source files

我正在测试我是否可以依赖 __LINE__ 始终 return 正确的值并创建了一个包含很多行的大型源文件。

在某些时候,内联函数名称(其名称类似于 fun@7564-1,其中 7564 是行号)再次从零开始计数。

经过一些研究,我注意到:

为了说明,一堆换行符和正在调试的方法超过了第 65535 行,我设法获得了盲源步进体验:

这个216边界是故意的还是无意的?它是 F# 或 CLR 或 PDB 格式人为强加的限制吗?

注意 (1):我只在 Windows 7 和 2012 上使用 F# 4.0、.NET 4.5 和 VS 2015 测试了这个。
注意 (2):我怀疑这个边界会经常被击中,除非可能是自动生成的源文件(在 C# 中我有一些超过这个边界的自动生成的文件)。

更新: 报告为 bug to the FSharp team on Github here

这似乎是 confirmed bug in Visual F#, the bug report has a full repro solution for download

大型 lambda 或入口点上有一个 related issue on large source files throwing WhosebugException in Debug build, and another related issue also throwing an SOE,但在任何构建中。