2010-07-07 54 views
7

我最近通过代码合同迁移了很多手动前提条件测试和异常抛出。我一直使用Microsoft.Contracts.dll程序集,而不是升级到.NET 4,所以我可以再坚持.NET 3.5(这是一个由.NET 3.5和.NET 4程序集使用的库)。我已经在Visual Studio 2010中设置了合同重写器,并且合同工作得很好。.NET 3.5的代码合同混淆了VS10的调试器

但是,由于我已经完成了这个转换,我注意到调试器在有合同的方法中很有趣,特别是在有ContractInvariantMethod的类中。执行光标似乎并不总是与突出显示的行相匹配,某些断点无法被命中,并且我有一种方法,调试器无法告诉局部变量名称,并显示像CS$1$0000这样的东西。这是在调试版本中。

在.NET 3.5到VS10中有关于使用代码合约Microsoft.Contracts.dll的已知问题吗? .NET 4中的代码合同是否会出现类似的问题?

[编辑]这个问题使我创建微软连接错误:https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in-iterator-methods-while-debugging

+0

[OT]真棒用户名:) – roundcrisis 2010-07-07 14:24:13

回答

1

我希望你知道什么合约重写意味着—飞行中产生的额外代码,它没有任何编译器锁定的源代码。由于CLR有这么多不同的元素,因此调试器根本不会做或者会感到困惑,只有那些具有广泛影响的全功能语言特性才能获得完整调试器支持的预算。比如lambda表达式。

这并不是说提交bug不是一个好的原因,只是当你使用一个甚至还没有完全开发的方面时,你不应该期望任何东西变得更好。作为早期采用者总是有这样的成本,但也有吹牛的权利:-)

+0

是的,我知道外部工具必须和IL一起玩并且移动东西。自从问这个问题以来,我迁移到了.NET 4并且一直没有被这个问题困扰过。我猜想.NET 3.5代码合同工具在这方面是不完整的。 – Trillian 2010-07-29 14:09:47

0

心目中,该代码合同目前还没有与后置条件&多线程工作。 限制合同只做先决条件重写。在我们的系统中解决了很多问题的 。

+0

其实在我的情况下,只要打开合同重写,即使重写设置为无,将导致问题。所以postconditions不是问题,我没有做任何多线程。 – Trillian 2010-07-13 00:01:32