是否有分析.NET代码并查找竞争条件的工具?
我有一些代码具有公共静态属性,可以获取或创建私有静态字段。它还有一个公共静态方法,将该字段设置为null(...是的,我知道!..)
由于这两种方法都没有锁定,因此可以肯定的是,未来的事情将会出现严重错误。我需要一个工具,它递归地遍历调用这些方法之一的东西,看看是否有其他线程产生了什么。
我正在寻找一个工具或nDepend SQL脚本(如果可能的话)。
答案 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)
答案 5 :(得分:0)
你看过Red-Gate Ants了吗?我不确定它是否会做你需要的一切,但它是一个很好的产品: