1

我现在使用 Visual Studio 2010,它带有一个很好的代码分析工具。

有没有办法指示它定位在迭代时尝试修改集合的调用?任何其他代码分析都可以吗?

目的是防止异常,例如在运行时发生的标题中的异常。

4

2 回答 2

2

这通常是由线程引起的错误,没有正确锁定对线程之间共享的集合的访问。在迭代集合的代码中特别容易被忽视,因为这本身就是一个线程安全的操作。在迭代过程中添加或删除元素是导致 kaboom 的原因。是的,很难诊断,因为它不会发生在修改集合的代码上。您只有在损坏完成很久之后才会发现。

也可以在非线程代码中,但这很容易调试。

不存在可以分析代码中时序问题的静态分析器。执行时间完全是不确定的。如果他们这样做了,那么编写线程安全的代码将变得更加容易。任何解决了这个问题同时又不完全破坏效率的人都将获得诺贝尔奖。

于 2012-05-10T12:43:59.100 回答
1

可以编写一条规则来检查一种特殊情况:当集合在检索其枚举器和调用枚举器的 MoveNext() 或 Reset() 方法之间同步修改时。不幸的是,即使这在实践中也很困难,因为每个可枚举类型都可以不同地实现修改检测,因此检测实际修改并非易事。

基本上,除非您由于这种可解决的场景而遇到很多问题,否则这种事情并不值得。这通常不应该是这种情况,因为在标准测试期间很容易检测到。

于 2012-05-10T13:08:56.327 回答