Tri*_*ian 7 .net debugging visual-studio-2010 code-contracts .net-3.5
我最近迁移了许多手动前提条件测试和代码合同的异常抛出.而不是升级到.NET 4,我一直在使用Microsoft.Contracts.dll程序集,所以我可以坚持使用.NET 3.5(这是一个由.NET 3.5和.NET 4程序集使用的库).我在Visual Studio 2010中设置了合同重写器,合同工作正常.
但是,因为我已经完成了那个开关,所以我注意到调试器在带有契约的方法中表现得很有趣,特别是在具有ContractInvariantMethod的类中.执行游标似乎并不总是与突出显示的行匹配,一些断点无法被命中,我有一个方法,调试器无法告诉本地变量名称,并显示类似的东西CS$1$0000.这是在调试版本中.
Microsoft.Contracts.dll在.NET 3.5到VS10中使用代码契约是否存在已知问题?.NET 4中的代码合同是否会出现类似的问题?
[编辑]这个问题让我在Microsoft Connect上创建了一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in -迭代器的方法,同时调试
我希望你知道合约重写意味着什么——动态生成的额外代码,没有任何源代码可供编译器锁定。由于 CLR 具有如此多的不同元素,调试器有很多事情要么根本不会做,要么会感到困惑,只有那些具有广泛影响的完整语言功能才能获得完整调试器支持的预算。例如 lambda 表达式。
这并不是说提交错误没有充分的理由,只是当您使用尚未完全开发的方面时,您不应该期望任何事情都会变得更好。成为早期采用者总是要付出这样的代价,但也有吹牛的权利:-)