【问题标题】:Looking for a Static Code Analysis Tool For Concurrency in .NET like CheckThread for java [closed]在.NET中寻找用于并发的静态代码分析工具,例如Java的CheckThread [关闭]
【发布时间】:2012-08-01 19:06:46
【问题描述】:

我正在 c# 中实现并发 .NET 数据结构(如 ConcurrentDictionaryBlockcingCollection 等)。这不仅仅是在从不同线程访问时不要忘记锁定对象。它需要复杂的锁定策略来最大化并行执行时间。

我知道有一个工具,一种用于 .NET 系统并发测试的框架,名为 CHESS

问题:是否还有一种工具可以通过静态代码分析发现并发/线程问题? CheckThread 之类的东西是用于 java 的。

【问题讨论】:

  • 我有 2 个“不具建设性”——接近投票。如果有人愿意发表评论,这将有助于我理解我的问题出了什么问题。
  • software.intel.com/en-us/articles/intel-inspector-xe 用于在运行时检查并发问题...还有一个静态分析器,但这是针对 C++ 的。
  • 谢谢@colinsmith。您为什么不添加一些文本、信息、您在该工具上的经验并从中做出答案?
  • 另外,如果您使用的是 WinDBG,并且您的程序正进入死锁情况,您可以通过 SOSEX 插件使用死锁检测器。 stevestechspot.com .... 使用示例:blog.scriptico.com/04/…

标签: c# .net multithreading task-parallel-library


【解决方案1】:

这里有一组有助于并发编程的资源...它们是静态和基于运行时的工具的混合体。

英特尔 Inspector XE/Parallel Studio

英特尔在 Parallel Studio 中提供了一些有助于并发开发的工具,但他们的 Parallel Advisor 仅适用于 C/C++。

但对于 C#,您可以使用 Inspector XE(以前称为 Intel Thread Checker)进行运行时线程检查


PRESharp(微软卓越软件中心)

这里似乎提到了一种叫做 PRESharp 的东西:

现在我以前没有听说过...只有听起来相似的 PREFast,我过去曾用它来静态分析一些 C 驱动程序代码。我怀疑它是 Microsoft 内部工具,除非您获得特殊访问权限,否则其他人无法使用。


静态分析工具

这里有大量静态分析工具(例如 FXCop)。

这里提到的 Typemock Racer:

值得注意的是 Coverity Prevent 声称通过静态分析 C/C++、Java 或 C# 代码来检测并发缺陷(由 NASA 评定)。


WinDBG + SOSEX

其他有助于并发编程的工具是 WinDBG(Windows 调试工具的一部分,分布在 Windows SDK 中),它比 Visual Studio 调试器更强大。

注意:如果您在系统中安装 Windows Driver Kit 8,您现在可以在 Visual Studio 2012 中使用功能更强大的用户模式调试器,该调试器与 WinDBG 相当。

您还可以获取扩展 WinDBG 的插件,例如SOSEX 插件添加了!dlk 命令,可以帮助识别死锁的原因。


并发可视化工具(在 Visual Studio 2010+ 中)

Visual Studio 中有并发可视化工具和一个与之配套的 SDK。


一般并发编程设计注意事项


视频资源

这是一系列精彩的视频,可为您提供有关调试 .NET 应用程序的一般建议:

【讨论】:

  • 这些都不是静态分析器。但是,是的,这是一个独角兽购物问题。
【解决方案2】:

我应该补充:


基于模型的验证

此技术使用应用程序线程原语的正式模型,并尝试断言或反驳该模型具有您想要的属性,例如免于死锁。

使用正式语言(例如 Promela)编写模型,然后使用模型检查器(例如 Spin)证明模型的属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多