代码之家  ›  专栏  ›  技术社区  ›  Steve Dunn supercat

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

  •  39
  • Steve Dunn supercat  · 技术社区  · 15 年前

    有没有一个工具可以分析.NET代码并找到竞争条件?

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

    由于这两种方法都没有锁,所以可以肯定的是,将来情况会大错特错。我需要一个工具来递归地遍历调用这些方法中的任何一个的东西,看看是否有任何东西是在另一个线程上生成的。

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

    6 回复  |  直到 9 年前
        1
  •  20
  •   Lasse V. Karlsen    9 年前

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


    注释 :此答案来自2010年。正如所有建议的答案一样,建议往往会随着时间的推移而改变。现在可能还有其他产品,Chess是微软研究实验室的一个项目,它可能已经发展成最终产品,或者已经完全废弃了。请用一粒盐来回答这个问题,并进行新的研究,找出适合的产品。

        2
  •  4
  •   steve cook    10 年前

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

        3
  •  3
  •   Tim Cooper    13 年前

    你可能想退房 CHESS .

        4
  •  3
  •   Guillermo Ruffino    10 年前

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

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

    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

        5
  •  2
  •   Community CDub    8 年前

    请参阅以下答案: What static analysis tools are available for C#?

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

    同样,尝试 FxCop 来自微软。

        6
  •  0
  •   Keith Barrows    15 年前

    你看过吗 Red-Gate Ants ?我不确定它是否能满足您的所有需求,但它是一个很好的产品:

    • 在几分钟内确定性能瓶颈
    • 优化.NET应用程序性能
    • 使用行级计时向下钻取代码的慢行
    • 配置文件ASPX、ASP.NET、C代码和VB.NET应用程序