有没有一种工具可以分析.NET代码并找到竞态条件?
我有一些代码,其中有一个公共的静态属性来获取或创建私有的静态字段。它还有一个公共的静态方法将此字段设置为null(...是的,我知道!..)
由于这些方法都没有锁定,所以很可能在未来出现严重问题。我需要一种工具,可以递归地遍历调用这些方法的内容,并查看是否在另一个线程上生成了任何东西。
我正在寻找一种工具或者也许是nDepend SQL脚本(如果可能的话)。
有没有一种工具可以分析.NET代码并找到竞态条件?
我有一些代码,其中有一个公共的静态属性来获取或创建私有的静态字段。它还有一个公共的静态方法将此字段设置为null(...是的,我知道!..)
由于这些方法都没有锁定,所以很可能在未来出现严重问题。我需要一种工具,可以递归地遍历调用这些方法的内容,并查看是否在另一个线程上生成了任何东西。
我正在寻找一种工具或者也许是nDepend SQL脚本(如果可能的话)。
你可能在寻找下列其中一个内容:
注意:此回答为2010年的回答,就像所有推荐答案一样,随着时间的推移,推荐可能会发生变化。现在可能已经有其他产品了,Microsoft Research Labs的项目CHESS可能已经发展成为最终产品或被取消。请谨慎考虑此答案,并进行新的研究,以确定哪些产品适合当前情况。
lock (lockObj1)
lock (lockObj2)
{
// some code
}
... somewhere else in the app ...
lock (lockObj2)
lock (lockObj1) // <- I expect some "possible deadlock" detection here
{
// some code
}
Jinx会在运行时而不是静态时做这个操作,但这可能值得一看。
你看过Red-Gate Ants吗?我不确定它是否能满足你的所有需求,但它是一个很好的产品,可以: