C#/ .NET分析工具查找竞争条件/死锁

时间:2010-03-04 13:35:47

标签: c# .net multithreading static-analysis ndepend

是否有分析.NET代码并查找竞争条件的工具?

我有一些代码具有公共静态属性,可以获取或创建私有静态字段。它还有一个公共静态方法,将该字段设置为null(...是的,我知道!..)

由于这两种方法都没有锁定,因此可以肯定的是,未来的事情将会出现严重错误。我需要一个工具,它递归地遍历调用这些方法之一的东西,看看是否有其他线程产生了什么。

我正在寻找一个工具或nDepend SQL脚本(如果可能的话)。

6 个答案:

答案 0 :(得分:20)

你可能正在寻找其中一个:


注意:此答案来自2010年。与所有建议答案一样,建议往往会随着时间而变化。现在可能还有其他产品,CHESS是一个微软研究实验室项目可能已经演变成最终产品或完全被废弃。请尽量回答这个问题,并对现在适用的产品进行新的研究。

答案 1 :(得分:4)

Jinx将在运行时(非静态)执行此操作,但可能值得一看。

答案 2 :(得分:3)

您可能需要查看CHESS

答案 3 :(得分:3)

我一直在尝试如何轻松跟踪这些。我一直在努力跟踪一些死锁,特别是在使用许多不同锁语句的情况下。

我的目标是在发生死锁之前检测死锁,例如:如果您有两个资源,您知道必须始终以相同的顺序使用它们,否则可能会发生的死锁

lock (lockObj1) 
lock (lockObj2) 
{ 
    // some code
} 

...应用程序中的其他地方...

lock (lockObj2) 
lock (lockObj1) // <- I expect some "possible deadlock" detection here 
{ 
    // some code
} 

在这种情况下,我在一个地方使用lockObj1然后使用lockObj2,并在另一个地方以相反的顺序使用它们,这是您希望在应用程序中避免的内容 当然,锁定语句不需要像示例那样一个接一个地使用,复杂的应用程序可能有几个复杂的对象相互交互

我已在此处上传了包含测试用例的代码 https://github.com/glmnet/LockTracer

答案 4 :(得分:2)

请在此处查看答案:What static analysis tools are available for C#?

一些静态分析工具可以进行死锁检测。

另外,请尝试Microsoft的FxCop

答案 5 :(得分:0)

你看过Red-Gate Ants了吗?我不确定它是否会做你需要的一切,但它是一个很好的产品:

  • 在几分钟内确定性能瓶颈
  • 优化.NET应用程序性能
  • 深入研究使用行级时序减慢代码行数
  • 配置文件aspx,ASP.NET,C#代码和VB.NET应用程序