无论我是否在调试器下运行,我都在使用调试版本并在同一台机器上获得不同的结果。我正在使用优秀的 TestDriven.Net 来运行单元测试。
- 使用 TestDriven.Net 或外部 NUnit 运行器“运行”会产生相同的结果
- 使用 TestDriven.Net “使用调试器运行”会产生不同的结果
代码是
- 一个复杂的迭代网格变形例程,涉及在浮点精度限制下的大量计算
- C#, VS2012 针对.Net 3.5。
- 单线程
- 仅调试构建,未构建发布版本
- 同一台机器,没有省电\speedstep 或我知道的其他功能
- Vanilla C# - 没有不安全的代码、非托管库、平台调用等。
- 没有调试器检查代码或奇怪的第三方库
我还没有追溯到第一个差异(没有调试器就很棘手!)但是考虑到代码的迭代性,它的输入敏感和最小的差异将在足够的时间下增长到显着的比例。
我知道跨编译器、平台和体系结构的 fp 可重复性是多么脆弱,但很失望地发现调试器是造成这种情况的因素之一。
我是否必须接受这是生活中的事实,还是您可以提供任何建议?