盲源步进的谜团,或者F#在大型源文件上的表现如何不正常

时间:2015-11-19 03:08:43

标签: debugging compilation compiler-errors f# f#-4.0

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

在某些时候,内联函数名称(其名称为fun@7564-1,其中7564是行号)从零开始重复计数。

经过一番研究后,我注意到了:

  • 如果源代码点击65536行,则任何错误,消息,堆栈跟踪都从零开始计算
  • __LINE__仍会返回正确的值
  • 内联函数的装饰名称从零开始
  • 编译时间错误强调完全不相关的行
  • 通过调试逐步完成完全不相关的行
  • 在实际行上设置断点将其设置在“盲”行
  • 调试期间对变量的工具提示仍然显示正确的值,并且“盲”点中不显示工具提示。

为了说明,在一系列新行和被调试的方法超过65535的情况下,我设法获得了盲源步骤经验:

Blind source stepping

这个2 16 边界是故意还是偶然?它是由F#或CLR或PDB格式人为施加的限制吗?

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

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

1 个答案:

答案 0 :(得分:1)

这似乎是confirmed bug in Visual F#,错误报告有full repro solution for download

在大型源文件中有related issue在Debug版本中抛出StackOverflowException,在大型lambda或入口点上抛出another related issue also throwing an SOE,但在任何版本中都是如此。